使用CryptoJS 在JavaScript 中加密使用者密碼並嘗試使用PHP 的mcrypt_decrypt() 函數解密時出現差異函數時,出現差異函數可以出現。這主要是因為 mcrypt_decrypt() 僅使用金鑰進行加密/解密,而 CryptoJS 使用密碼來匯出金鑰和 IV。為了解決這個問題,需要在 PHP 中以相同的方式取得金鑰和 IV。
以下PHP 函數evpKDF 可用於從密碼和鹽匯出金鑰和IV:
<code class="php">function evpKDF($password, $salt, $keySize = 8, $ivSize = 4, $iterations = 1, $hashAlgorithm = "md5") { // ... (Code omitted for brevity) ... }</code>
一旦匯出金鑰和IV,就可以使用mcrypt_decrypt()解密加密的密文:
<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>
如果加密的密文是使用帶有「Salted__」前綴的專有OpenSSL 格式進行格式化的,則可以使用以下函數解密:
<code class="php">function decrypt($ciphertext, $password) { // ... (Code omitted for brevity) ... }</code>
透過與CryptoJS 相同的方式匯出金鑰和 IV 並使用適當的解密方法,您可以使用 mcrypt_decrypt() 有效地從 PHP 中的 JavaScript 解密加密密碼。
以上是如何使用 PHP 中的 mcrypt_decrypt() 解密 JavaScript 中的 AES 加密?的詳細內容。更多資訊請關注PHP中文網其他相關文章!