Bagaimana untuk Menyahsulit Penyulitan AES dalam PHP dengan MCrypt Menggunakan evpKDF()?

DDD
Lepaskan: 2024-11-03 02:02:02
asal
346 orang telah melayarinya

How to Decrypt AES Encryption in PHP with MCrypt Using evpKDF()?

Menyahsulit Penyulitan AES dalam PHP dengan MCrypt

Dalam senario ini, kata laluan disulitkan menggunakan CryptoJS dalam JavaScript dan perlu dinyahsulit pada sisi pelayan dengan PHP menggunakan MCrypt. Begini cara untuk mencapainya:

Isu dengan Penyahsulitan dalam PHP

Percubaan sebelumnya untuk menyahsulit kata laluan menggunakan fungsi mcrypt_decrypt() MCrypt gagal disebabkan oleh perbezaan dalam penjanaan kunci. CryptoJS menggunakan kata laluan untuk mencipta kedua-dua kunci AES dan vektor permulaan (IV), manakala MCrypt hanya menggunakan kunci untuk penyulitan/penyahsulitan.

Penyelesaian dengan Fungsi evpKDF()

Untuk menyelesaikan masalah ini, kita perlu mendapatkan kunci dan IV dalam PHP menggunakan kaedah yang sama seperti CryptoJS. Berikut ialah fungsi evpKDF() tersuai untuk tujuan ini:

<code class="php">function evpKDF($password, $salt, $keySize = 8, $ivSize = 4, $iterations = 1, $hashAlgorithm = "md5") {
    // Code goes here...
}</code>
Salin selepas log masuk

Proses Penyulitan Diubah Suai

Untuk menggunakan fungsi evpKDF(), kata laluan yang disulitkan dalam JavaScript harus mengandungi garam yang dijana. Berikut ialah kod CryptoJS yang dikemas kini:

<code class="javascript">    var encryptedPassword = CryptoJS.AES.encrypt(password, "Secret Passphrase");
    var ivHex = encryptedPassword.iv.toString();
    var ivSize = encryptedPassword.algorithm.ivSize; // same as blockSize
    var keySize = encryptedPassword.algorithm.keySize;
    var keyHex = encryptedPassword.key.toString();
    var saltHex = encryptedPassword.salt.toString(); // must be sent
    var openSslFormattedCipherTextString = encryptedPassword.toString(); // not used
    var cipherTextHex = encryptedPassword.ciphertext.toString(); // must be sent</code>
Salin selepas log masuk

Proses Penyahsulitan dalam PHP

Di bahagian pelayan dalam PHP, dapatkan semula garam dan teks sifir daripada permintaan. Kemudian, gunakan fungsi evpKDF() untuk mendapatkan kunci dan IV berdasarkan kata laluan dan garam:

<code class="php">$keyAndIV = evpKDF("Secret Passphrase", hex2bin($saltHex));</code>
Salin selepas log masuk

Akhir sekali, lakukan penyahsulitan dengan MCrypt:

<code class="php">$decryptPassword = mcrypt_decrypt(MCRYPT_RIJNDAEL_128, 
        $keyAndIV["key"], 
        hex2bin($cipherTextHex), 
        MCRYPT_MODE_CBC, 
        $keyAndIV["iv"]);</code>
Salin selepas log masuk

Ini sepatutnya berjaya menyahsulit kata laluan yang disulitkan menggunakan CryptoJS dengan AES. Selain itu, versi yang menggunakan sambungan OpenSSL disediakan sebagai alternatif kepada MCrypt.

Atas ialah kandungan terperinci Bagaimana untuk Menyahsulit Penyulitan AES dalam PHP dengan MCrypt Menggunakan evpKDF()?. 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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan