Encryption Class
คลาส Encryption สามารถทำการเข้ารหัสและถอดรหัสข้อมูลได้ โดยใช้รูปแบบที่ก่อนจะเข้ารหัสข้อความนั้นจะสุ่มรูปแบบ "hashed bitwise XOR encoding" ซึ่งมันจะถูกเข้ารหัสโดยใช้ไลบรารี่ Mcrypt ถ้า Mcrypt ไม่สามารถใช้งานได้บนเซิร์ฟเวอร์ของคุณ ระบบเข้ารหัสข้อความนั้นจะยังคงทำหน้าที่ความปลอดภัยได้สมเหตุสมผล สำหรับการเข้ารหัส session หรืออื่นๆอย่างเช่นจุดประสงค์ที่จะทำให้มัน "light" ถ้ามี Mcrypt คุณจะได้ผลที่ดีมากขึ้นเพราะมันจะทำการเข้ารหัสข้อความถึงสองชั้น ซึ่งทำให้มีความปลอดภัยที่สูงมาก
ตั้งค่ากุญแจ
กุญแจ คือส่วนของหนึ่งของการควบคุมระบบใส่รหัสและถอดรหัส ในความเป็นจริงแล้ว การเลือกใช้กุญแจนั้นจะมีความหมายกับการถอดรหัสข้อมูลที่ถูกเข้ารหัสด้วยกุญแจนั้น ไม่เพียงแต่จะต้องเลือกกุญแจอย่างระมัดระวัง คุณจะต้องไม่เปลี่ยนมันเลยถ้าคุณจะใช้มันกับข้อมูลถาวร
เราจะไปต่อไม่ได้ถ้าไม่พูดเรื่องวิธีป้องกันกุญแจคุณ ถ้ามีใครเข้าได้กุญแจคุณไป ข้อมูลเหล่านั้นจะสามารถถูกถอดรหัสได้อย่างง่ายดาย ถ้าเซิร์ฟเวอร์ของคุณนั้นคุณไม่สามารถควบคุมได้ทั้งหมด มันจะเป็นไปไม่ได้เลยที่จะแน่ใจว่ากุญแจนั้นอยู่ในความปลอดภัยดังนั้น คุณอาจจะต้องคิดให้ดีก่อนที่จะใช้มันสำหรับความปลอดภัยขั้นสูง เช่นเก็บข้อมูลบัตรเครดิต
เพื่อประโยชน์ความปลอดภัยสูงสุดในการเข้ารหัส คุณควรใช้กุญแจขนาดความยาว 32 ตัวอักษร (128 bits) กุญแจควรที่จะเป็นสตริงแบบสุ่มซึ่งประกอบด้วย ตัวเลข ตัวอักษรพิมพ์ใหญ่ และตัวอักษรพิมพ์เล็ก และกุญแจมันไม่ควรจะเป็นข้อความสตริงธรรมดา เพื่อการเข้ารหัสที่ปลอดภัย มันควรจะเป็นแบบสุ่มมากที่สุด
กุญแจคุณสามารถถูกเก็บอยู่ใน application/config/config.php หรือคุณสามารถที่จะออกแบบวิธีเก็บและส่งกุญแจของคุณเองได้เวลาเข้ารหัสหรือถอดรหัสได้
ในการเก็บกุญแจของคุณ application/config/config.php ให้เปิดไฟล์และตั้งค่า
$config['encryption_key'] = "YOUR KEY";
ความยาวของข้อความ
มันเป็นสิ่งสำคัญสำหรับคุณที่จะรู้ว่าข้อความที่ถูกเข้ารหัสนั้น ฟังก์ชันเข้ารหัสจะทำให้เกิดข้อความที่ยาวกว่าข้อความปกติประมาณ 2.6 เท่า ตัวอย่างเช่น ถ้าคุณจะเข้ารหัสสตริง "my super secret data" ซึ่งมีความยาวตัวอักษร 21 ตัว คุณจะได้ตริงหลังการเข้ารหัสราวๆ 55 ตัวอักษร(เราใช้คำว่า "ราวๆ" นั้นเพราะสตริงที่ถูกเข้ารหัสจะเพิ่มขึ้น 64 บิต ซึ่งมันไม่ใช่การเพิ่มข้อแน่นอนเป็นเส้นตรง) เก็บข้อมูลตรงนี้ไว้เมื่อจะทำการเก็บข้อมูลลงในวิธีการต่างๆ ตัวอย่างเช่น Cookies ซึ่งสามารถเก็บข้อมูลได้ 4K
เริ่มต้นใช้คลาส
เหมือนคลาสอื่นๆของ CodeIgniter คลาส Encryption นั้นเริ่มต้นได้ในตัวบควมคุม(controller) โดยใช้ฟังก์ชัน $this->load->library
$this->load->library('encrypt');
เมื่อโหลดแล้วคุณสามารถใช้ออบเจ็ค Encrypt ได้โดยการใช้ $this->encrypt
$this->encrypt->encode()
ทำการเข้ารหัสข้อมูลและส่งกลับมาเป็นสตริง ตัวอย่างเช่น
$msg = 'My secret message';
$encrypted_string = $this->encrypt->encode($msg);
คุณสามารถใส่กุญแจเองได้ในพารามิเตอร์ที่สองถ้าคุณไม่อยากใช้กุญแจที่ใส่ไว้ในไฟล์ปรับแต่ง (config.php)
$msg = 'My secret message';
$key = 'super-secret-key';
$encrypted_string = $this->encrypt->encode($msg, $key);
$this->encrypt->decode()
ถอดรหัสสตริง ตัวอย่างเช่น
$encrypted_string = 'APANtByIGI1BpVXZTJgcsAG8GZl8pdwwa84';
$plaintext_string = $this->encrypt->decode($encrypted_string);
ฟังก์ชันนี้คุณก็สามารถใส่กุญแจเองได้ในพารามิเตอร์ที่สองถ้าคุณไม่อยากใช้กุญแจที่ใส่ไว้ในไฟล์ปรับแต่ง
$this->encrypt->set_cipher();
ยอมให้คุณตั้งค่ากุญแจสำหรับแปรรหัส Mcrypt ได้โดยปกติแล้วจะใช้ MCRYPT_RIJNDAEL_256. ตัวอย่างเช่น
$this->encrypt->set_cipher(MCRYPT_BLOWFISH);
คุณสามารถเข้าไปใน php.net เพื่อดูรายการทั้งหมดของ ตัวแปรรหัสที่สามารถใช้ได้
ถ้าคุณต้องการจะตรวจสอบด้วยตัวเองว่าเซิร์ฟเวอร์ของคุณรองรับ Mcrypt หรือไม่คุณสามารถใช้คำสั่งนี้เพื่อดูได้
echo ( ! function_exists('mcrypt_encrypt')) ? 'Nope' : 'Yup';
$this->encrypt->set_mode();
ยอมให้คุณตั้งค่ารูปแบบของ Mcrypt โดยปกติแล้วใช้ MCRYPT_MODE_ECB. ตัวอย่างเช่น
$this->encrypt->set_mode(MCRYPT_MODE_CFB);
คุณสามารถเข้าไปใน php.net เพื่อดูรายการทั้งหมดของ โหมดที่สามารถใช้ได้
$this->encrypt->sha1();
ฟังก์ชันเข้ารหัสแบบ SHA1 โดยจะคืนค่าสตริงมาเป็น 160 bit แบบ hash ทางเดียวคือไม่สามารถถอดรหัสกลับได้ ข้อสังเกตุ SHA1 ก็เหมือน MD5 คือไม่สามารถถอดรหัสกลับได้ ตัวอย่างเช่น
$hash = $this->encrypt->sha1('Some string');
โดยทั่วไปแล้วการติดตั้ง PHP จะรองรับ SHA1 อยู่แล้วดังนั้นถ้าความต้องการของคุณทั้งหมดคือการเข้ารหัส hash คุณสามารถใช้ฟังก์ชันที่มีอยู่แล้วได้คือ
$hash = sha1('Some string');
ถ้าเซิร์ฟเวอร์ของคุณไม่รองรับ SHA1 คุณสามารถใช้ฟังก์ชันนี้ที่เราเตรียมไว้ให้คุณได้