首頁 >後端開發 >php教程 >如何在 PHP 中解密使用 CryptoJS 加密的密碼?

如何在 PHP 中解密使用 CryptoJS 加密的密碼?

DDD
DDD原創
2024-11-03 16:56:02958瀏覽

How to Decrypt a Password Encrypted with CryptoJS in PHP?

使用PHP 進行JavaScript 加密解密疑難排解

在嘗試使用CryptoJS 解密在JavaScript 中加密的密碼並使用mcrypt_decrypt() 在PHP 伺服器上解密時,您遇到了解密密碼已損壞的問題。這是因為提供給 mcrypt_decrypt() 的參數不正確。

要解決此問題,您需要了解 CryptoJS 和 mcrypt_decrypt() 處理加密方式的差異。 CryptoJS 使用 var cryptoPassword = CryptoJS.AES.encrypt(password, "Secret Passphrase") 中提供的密碼來產生 AES 加密的加密金鑰和初始化向量 (IV)。

另一方面, mcrypt_decrypt() 僅使用密碼作為加密金鑰。這意味著你需要以與 CryptoJS 相同的方式匯出金鑰和 IV,才能成功解密 PHP 中的密文。

以下程式碼示範如何解決此問題:

<code class="php">$saltHex = $_POST['salt'];  // Received from the JavaScript request
$ciphertextHex = $_POST['ciphertext'];  // Received from the JavaScript request

// Convert salt from hex to binary
$salt = hex2bin($saltHex);

function evpKDF($password, $salt, $keySize, $ivSize) {
    $hasher = hash_init('sha256');
    hash_update($hasher, $password);
    hash_update($hasher, $salt);
    $derivedBytes = hash_final($hasher, TRUE);

    return array(
        "key" => substr($derivedBytes, 0, $keySize),
        "iv" => substr($derivedBytes, $keySize, $ivSize)
    );
}

// Derive key and IV from passphrase and salt
$keyAndIV = evpKDF("Secret Passphrase", $salt, 16, 16);

// Decrypt ciphertext using mcrypt_decrypt()
$decryptPassword = mcrypt_decrypt(MCRYPT_RIJNDAEL_128,
    $keyAndIV["key"],
    hex2bin($ciphertextHex),
    MCRYPT_MODE_CBC,
    $keyAndIV["iv"]);</code>

透過與CryptoJS相同的方式匯出金鑰和IV,您可以確保解密過程正確執行並且解密的密碼是準確的。

以上是如何在 PHP 中解密使用 CryptoJS 加密的密碼?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn