PHP – 2 Way Encrypt by PKI


ช่วงนี้ขยันครับกะจะปั่นบาความใหม่ๆสะหน่อย หลังจากไม่ได้เขียนมาสะนาน  วันนี้เอาเรื่องเกี่ยวกับ Developer บ้างผมเองเป็นทั้ง System,  Programing   เลยยกเรื่องการเ้ข้ารหัสข้อมูลที่เป็นแบบ  2 way คือสามารถ เข้ารหัส และถอดกลับมาได้  และมีความปลอดภัยสูง

PKI มาพูดเรื่อง PKI ก่อนนะครับ   ส่วนตัวผมเองไม่ได้เรื่อง IT มาเรื่อง PKI  ผมเองก็ได้แต่อ่านๆจากในเน็ต แล้วก็นำมาเล่าสู่กันฟัง    ท่าสามารถหาข้อมูลที่ลึงมากกว่านี้ได้จาก Link ข้างล่าง    “Public key infrastructure”  คือการเข้ารหัสข้อมูล โดยใช้  กุญแจ 2 ลูกคือ   Public Key และ Private Key       หากเราเข้ารหัสข้อมูลโดยใช้  Private Key     เราก็ต้องถอดรหัสโดยใช้  Public Key     ในทางกลับกัน ถ้าเข้ารหัสด้วย Public Key ก็ต้องใช้ Private Key ถอดรหัสเท่านั้น

ทีนี้มาพูดถึงความปลอดภัย   ตัว PKI เองสามารถเลือก bit การเข้ารหัสได้ตามที่เราต้องการ ตั้งแต่ 512, 1024, 2048  และสามารถเข้ารหัวได้สูงกว่านี้   ทำให้เป็นการยากที่จะถอดรหัสได้    ทุกๆวันนี้เราเองก็ใช้เทคโนโลยีนี้แทบทุกวัน โดยที่เราไม่รู้ตัว  อย่างบัตร SmartCard เองก็ใช้ PKI ในการเข้ารหัส หรือ Card UBC  เองก็ใช้เช่นกัน    อีกตัวอย่างคือ   เวลาเข้าเว็บไซด์ผ่าน https   ระหว่าง Web Server และ Browser ก็จะมีการเข้ารหัสข้อมูล โดยใช้เทคโนโลยี PKI    ในการเข้ารหัสเช่นกัน

ทีนี้มาพูดถึงแนวทางเอาไปใช้งานกับ PHP     ในการณี้ทีเรามีข้อมูลที่เราต้องการเข้ารหัส  และต้องสามารถถอดรหัสกลับมาได้ด้วย  เราสามารถเอา PKI เข้ามาแก้ไขปัญหาดั่งกล่าวได้    โดยการสร้าง Private Key และ Publick Key  ในการถอดรหัส   แต่มีข้อแม้ว่า Key ดั่งกล่าวต้องไม่หาย   ถ้าหาย ก็บอกลา Data ที่คุณเข้ารหัสไว้ได้เลย

ตัวอย่าง ผมมีข้อมูลที่ต้องส่งผ่านหน้า Web โดยการ Redirect ผ่าน URL  ไปยังอีกเว็บหนึ่ง โดยที่ผมไม่ต้องการให้ใครสามารถเปิดข้อมูลได้  ผมจะทำการ  Encryt ข้อมูลโดยใช้ Public Key ของเว็บตรงข้าม และ เว็บตรงข้ามต้องใช้ Private Key  เท่านั้นในการ Decrypt ข้อมูล

1.  สร้าง Private Key และ Pubkic Key  ผ่่าน Command Line

openssl genrsa -out private.key 2048
openssl rsa -pubout  < private.key  > public.key

2.  ทำการสร้าง Code PHP  Function

<?php
function EncryptData($source)
{
	$fp=fopen( "public.key","r");
	$pub_key=fread($fp,8192);
	fclose($fp);
	openssl_get_publickey($pub_key);
	openssl_public_encrypt($source,$crypttext,$pub_key);
	return(base64_encode($crypttext));
}

function DecryptData($source)
{
	$fp=fopen( "private.key","r");
	$priv_key=fread($fp,8192);
	fclose($fp);
	$res = openssl_get_privatekey($priv_key);
	$decoded_source = base64_decode($source);
	openssl_private_decrypt($decoded_source,$newsource,$res);
	return($newsource);
}
?>

การนำไปใช้งาน  ท่านสามารถเอา  ใช้ PHP เรียก Function  ดั่งกล่าว เพื่อ Encrypt และ Decrypt ได้เลยครับ

Refer:

http://en.wikipedia.org/wiki/Public_key_infrastructure

http://thaicert.nectec.or.th/paper/encryption/sshl.php

http://www.google.co.th/search?hl=th&q=Public+key+infrastructure&btnG=%E0%B8%84%E0%B9%89%E0%B8%99%E0%B8%AB%E0%B8%B2&meta=cr%3DcountryTH

Related Posts

Tags: , ,


One Response to “PHP – 2 Way Encrypt by PKI”

  1. golfreeze Says:

    เก๋าจริงๆ พี่อัท

Leave a Reply

IMPORTANT! To be able to proceed, you need to solve the following simple math (so we know that you are a human) :-)

What is 15 + 5 ?
Please leave these two fields as-is: