Melaksanakan OpenSSL di Tempat Mcrypt untuk Penyulitan
Dalam aplikasi PHP yang pada masa ini menggunakan Mcrypt untuk penyulitan data, terdapat keperluan untuk menggantikan Mcrypt dengan OpenSSL. Pelaksanaan asal menggunakan sifir blowfish dalam mod ECB, tetapi menggantikan Mcrypt dengan OpenSSL menimbulkan cabaran kerana hasil penyulitan yang berbeza dan panjang IV yang diperlukan.
Memahami Percanggahan
Kedua-duanya fungsi penyulitan, mcrypt_encrypt dan openssl_encrypt, menghasilkan keputusan yang berbeza. Selain itu, mcrypt memerlukan IV 56-bait untuk blowfish-ecb, manakala openssl menggunakan IV panjang sifar. Perbezaan ini berpunca daripada algoritma pelapik berbeza yang digunakan oleh Mcrypt (PKCS#5) dan OpenSSL (PKCS#7).
Mengatasi Perbezaan Penyulitan
Untuk mengurangkan percanggahan penyulitan , padding manual data dengan padding PKCS#7 diperlukan sebelum menyulitkan dengan mcrypt. Ini memastikan keserasian dengan algoritma padding yang digunakan oleh OpenSSL. Contoh berikut menunjukkan pendekatan ini:
$key = "anotherpassword1"; $str = "does it work 12"; $enc = mcrypt_encrypt(MCRYPT_BLOWFISH, $key, $str."", MCRYPT_MODE_ECB); $dec = mcrypt_decrypt(MCRYPT_BLOWFISH, $key, $enc, MCRYPT_MODE_ECB); echo(bin2hex($enc).PHP_EOL); // Encrypted data var_dump($dec); // Decrypted data $enc = openssl_encrypt($str, 'bf-ecb', $key, true); $dec = openssl_decrypt($enc, 'bf-ecb', $key, true); echo(bin2hex($enc).PHP_EOL); // Encrypted data var_dump($dec); // Decrypted data
Pertimbangan Penghijrahan
Memandangkan penyahsulitan data yang disulitkan dengan Mcrypt menggunakan OpenSSL adalah tidak praktikal, satu-satunya penyelesaian adalah dengan menyulitkan semula data. Ini menimbulkan usaha migrasi yang ketara, kerana semua data yang disulitkan sebelum ini mesti disulitkan semula menggunakan OpenSSL.
Atas ialah kandungan terperinci Bagaimana untuk Berhijrah dari Mcrypt ke OpenSSL untuk Penyulitan Data dalam PHP?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!