首页  >  文章  >  后端开发  >  如何使用 PHP 中的 mcrypt_decrypt() 解密 JavaScript 中的 AES 加密?

如何使用 PHP 中的 mcrypt_decrypt() 解密 JavaScript 中的 AES 加密?

Linda Hamilton
Linda Hamilton原创
2024-11-05 03:10:01735浏览

How to Decrypt AES Encryption in JavaScript with PHP Using mcrypt_decrypt()?

使用 PHP 中的 mcrypt_decrypt() 解密 AES 加密

使用 CryptoJS 在 JavaScript 中加密用户密码并尝试使用 PHP 的 mcrypt_decrypt() 函数解密时,出现差异可以出现。这主要是因为 mcrypt_decrypt() 仅使用密钥进行加密/解密,而 CryptoJS 使用密码来导出密钥和 IV。为了解决这个问题,需要在 PHP 中以相同的方式获取密钥和 IV。

使用 evpKDF 导出密钥和 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>

使用 OpenSSL 格式的密文解密

如果加密的密文是使用带有“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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn