Mengapa Mcrypt dan OpenSSL Menghasilkan Keputusan Penyulitan Berbeza untuk Blowfish-ECB?

Barbara Streisand
Lepaskan: 2024-11-20 19:10:16
asal
706 orang telah melayarinya

Why Do Mcrypt and OpenSSL Produce Different Encryption Results for Blowfish-ECB?

Menggantikan Mcrypt dengan OpenSSL

Isu: Menghijrahkan aplikasi daripada menggunakan Mcrypt ke OpenSSL untuk penyulitan data. Sifir penyulitan ialah Blowfish dan modnya ialah Buku Kod Elektronik (ECB). Walau bagaimanapun, output daripada fungsi Openssl_encrypt dan Openssl_decrypt berbeza daripada rakan MCrypt, walaupun mempunyai parameter yang sama.

Punca:

Percanggahan timbul daripada algoritma pelapik berbeza yang digunakan oleh Mcrypt dan OpenSSL. Mcrypt menggunakan padding PKCS#5, manakala OpenSSL menggunakan padding PKCS#7. Pelapik PKCS#7 memerlukan minimum 1 bait padding, manakala padding PKCS#5 membenarkan panjang padding 0 bait. Selain itu, Mcrypt memerlukan Vektor Permulaan (IV) untuk mod ECB, walaupun IV tidak diperlukan untuk mod ECB.

Penyelesaian:

Untuk menyelesaikan isu, sama ada pad data input secara manual dengan padding gaya PKCS#7 sebelum menggunakan fungsi MCrypt atau sulitkan semula data menggunakan padding yang betul algoritma.

Berikut ialah versi ubah suai kod yang disediakan dalam soalan yang menggunakan padding PKCS#7 untuk MCrypt:

$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);
var_dump($dec);

$enc = openssl_encrypt($str, 'bf-ecb', $key, true);
$dec = openssl_decrypt($enc, 'bf-ecb', $key, true);
echo(bin2hex($enc).PHP_EOL);
var_dump($dec);
Salin selepas log masuk

Dengan menambahkan 1 byte padding pada data input sebelum MCrypt penyulitan, output daripada kedua-dua fungsi Mcrypt dan OpenSSL akan sepadan. Ambil perhatian bahawa mod ECB tidak memerlukan IV, dan tidak perlu menyediakannya.

Atas ialah kandungan terperinci Mengapa Mcrypt dan OpenSSL Menghasilkan Keputusan Penyulitan Berbeza untuk Blowfish-ECB?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan