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