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

DDD
发布: 2024-11-03 16:56:02
原创
944 人浏览过

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中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板