PHP – 2 Way Encrypt by PKI
ช่วงนี้ขยันครับกะจะปั่นบาความใหม่ๆสะหน่อย หลังจากไม่ได้เขียนมาสะนาน วันนี้เอาเรื่องเกี่ยวกับ Developer บ้างผมเองเป็นทั้ง System, Programing เลยยกเรื่องการเ้ข้ารหัสข้อมูลที่เป็นแบบ 2 way คือสามารถ เข้ารหัส และถอดกลับมาได้ และมีความปลอดภัยสูง
มาพูดเรื่อง 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
September 15th, 2009 at 1:26 pm
เก๋าจริงๆ พี่อัท