Categories: IT Tips

เมื่อ PHP เข้ารหัสและถอดรหัสเพียงแค่ใช้กุญแจดอกสำคัญดอกเดียวกัน หรือเรียกว่า (Secret-Key)

PHP Secret-Key

ด้วยเหตุที่ว่า การเปลี่ยนแปลงไปในตัวของระบบ ระบบหนึ่งนั้นอาจจะต้องจำเป็นที่ต้องมีการที่จะแลกเปลี่ยนตัวของข้อมูลและข่าวสารที่เกิดขึ้นระหว่างเจ้าตัวของคอมพิวเตอร์ ซึ่งไม่ว่าจะเป็นในแบบของ client-server หรือไม่ว่าจะเป็นแบบ server-server ในที่นี้ เราจึงต้องควรที่จะคํานึง ถึงความปลอดภัยที่จะต้องมีในระหว่างการใช้งาน ที่จำเป็นจะต้องแลกเปลี่ยนข้อมูลนั้นเอง และด้วยวิธีการป้องกันที่จะไม่ให้ข้อความที่ต้องการจะสื่อสารนั้นต้องมีการเปลี่ยนแปลงแก้ไขหรืออาจจะต้องเปิดเผยข้อมูลสะก่อน  ที่จะถึงมือผู้รับนั้น  โดยที่มีการการเข้ารหัสข้อมูลหรือเรียกว่า Encryption ซึ่งจะเป็น อีกทางเลือกหนึ่งที่จะเป็นการเพิ่ม ความปลอดภัยให้กับข้อมูลมากยิ่งขึ้นนั้นเอง

และการเข้ารหัสในแบบสมมาตร ที่เรียกกันว่า Symmetric Encryption หรือ  Secret  Key นั้น

โดยที่เรานั้นจะนำข้อความ ในรูปแบบ Plain Text  ที่จะต้องการส่งนั้น มาทำการเข้ารหัสด้วยลูกกุญแจเสียก่อน หรือที่เราเรียกกันว่า Encryption ซึ่งจะได้มีข้อความที่จะต้องถูกเข้ารหัส หรือCipher Text เสียก่อน โดยการเข้ารหัสที่จะต้องจะใช้ Key ลับนั้น ผู้เข้ารหัสนั้นจะต้องเป็นคนที่สามารถถอดหัสนั้นได้ ก็ต้องจำเป็นที่จะใช้ Key เดียวกันด้วยถึงจะถูกต้อง

อย่างเช่น mcrypt_encrypt/ mcrypt_decrypt ซึ่งในแบบนี้จำเป็นจะต้องมี key ที่ต้องใช้ ในการถอดรหัส จำนวน 2 คีย์ อันหนึ่งนั้นอาจจำเป็นจะต้องรู้เฉพาะคนใดคนหนึ่ง และอีกอันจะต้องสุ่มไว้ให้ตอนที่จะเข้ารหัสครั้งแรกซึ่งจะใช้ 64_encode เก็บไว้ด้วย ทั้ง key ที่เราได้สุ่มมา และ พาสที่จะต้องใช้เข้ารหัสแล้ว ซึ่งถ้าให้ปลอดภัยดีกว่านั้นอาจจะต้องเก็บแยกกันจะดีที่สุด

 

ซึ่งในตัวอย่าง code ฝั่งส่งอาจจะเป็น (url ให้เป็น http://www.example.com/api)

<?php

 

$data = ‘Test Symmetric Encryption’;

 

$key = ‘utrdn6kcxkfgs6keo23345kfniomgf4s’;

$suffix = ‘4678965001980654’;

 

$code = mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $key, $data, MCRYPT_MODE_CFB, $suffix);

echo $code; exit;

 

?>

 

และในตัวอย่าง code ฝั่งรับ ก็อาจจะเป็น

<?php

 

$code = file_get_contents(‘http://www.example.com/api’);

 

$key = ‘utrdn6kcxkfgs6keo23345kfniomgf4s’;

$suffix = ‘4678965001980654’;

 

$data = mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $key, $code, MCRYPT_MODE_CFB, $suffix);

 

?>

แต่อย่างไรก็ตาม การทำ Code นั้น จะต้องเก็บรักษาไว้ให้ดีเพราะไม่อย่างนั้นเราอาจจะมีปัญหาเกิดขึ้น

ขอบคุณที่มา softmelt

none: