Dalam JavaScript, kata laluan pengguna yang disulitkan sedang dibuat menggunakan CryptoJS, menggunakan kata laluan- terbitan kunci berasaskan untuk kedua-dua kunci dan IV. Walau bagaimanapun, percubaan penyahsulitan pada pelayan PHP, menggunakan perpustakaan mcrypt, telah gagal, mengakibatkan rentetan dekripsi yang tidak masuk akal.
Ralat utama berpunca daripada kaedah penyulitan yang berbeza yang digunakan dalam JavaScript (CryptoJS ) dan PHP (mcrypt). Dalam CryptoJS, kunci dan IV diperoleh daripada kata laluan, manakala mcrypt bergantung sepenuhnya pada kata laluan untuk penyulitan/penyahsulitan. Untuk membetulkannya, kunci dan IV mesti dijana dalam PHP menggunakan teknik yang serupa dengan yang digunakan dalam CryptoJS.
Memindahkan parameter saltHex dan cipherTextHex ke pelayan PHP, dan proses penyulitan JavaScript yang dipertingkatkan kini dilaksanakan:
<code class="javascript">var encryptedPassword = CryptoJS.AES.encrypt(password, "Secret Passphrase"); var ivHex = encryptedPassword.iv.toString(); var saltHex = encryptedPassword.salt.toString(); var cipherTextHex = encryptedPassword.ciphertext.toString();</code>
Fungsi PHP berikut memperoleh kunci dan IV daripada kata laluan dan garam:
<code class="php">function evpKDF($password, $salt, $keySize = 8, $ivSize = 4, $iterations = 1, $hashAlgorithm = "md5") { /* ... code for key and IV derivation ... */ return [ "key" => substr($derivedBytes, 0, $keySize * 4), "iv" => substr($derivedBytes, $keySize * 4, $ivSize * 4) ]; }</code>
Berbekalkan kunci terbitan dan IV, penyahsulitan dilakukan dalam PHP:
<code class="php">$keyAndIV = evpKDF("Secret Passphrase", hex2bin($saltHex)); $decryptPassword = mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $keyAndIV["key"], hex2bin($cipherTextHex), MCRYPT_MODE_CBC, $keyAndIV["iv"]);</code>
Menggunakan sambungan OpenSSL ialah alternatif untuk penyahsulitan:
<code class="php">$decryptPassword = openssl_decrypt( substr($ciphertext, 16), "aes-256-cbc", $keyAndIV["key"], OPENSSL_RAW_DATA, $keyAndIV["iv"]);</code>
Dengan pengubahsuaian ini, penyulitan lancar dan penyahsulitan kata laluan pengguna kini boleh dicapai antara JavaScript dan PHP, memastikan pengendalian data selamat.
Atas ialah kandungan terperinci Bagaimana untuk Menyahsulit Kata Laluan Tersulit CryptoJS dalam PHP Menggunakan mcrypt?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!