加密js加密字符串在php中不解密

加密js加密字符串在php中不解密,php,encryption,aes,cryptojs,Php,Encryption,Aes,Cryptojs,我使用下面的js代码来加密字符串 var text = 'should be decrypted!'; var key = 'HighlySecretKeyForJsEncryption!!'; var encrypted = CryptoJS.AES.encrypt(text, key); console.log(encrypted.toString()); 输出:U2FsdGVkX19vf+s6/+eB8A+3iKFCl1A0e+oe0BSbcMVGxb64FL35Q3CB/LZNu4ng

我使用下面的js代码来加密字符串

var text = 'should be decrypted!';
var key = 'HighlySecretKeyForJsEncryption!!';
var encrypted = CryptoJS.AES.encrypt(text, key);
console.log(encrypted.toString());
输出:U2FsdGVkX19vf+s6/+eB8A+3iKFCl1A0e+oe0BSbcMVGxb64FL35Q3CB/LZNu4ng

这就是我在php中解密的结果

function decrypt($toDecrypt) {
    $key = "HighlySecretKeyForJsEncryption!!";
    $iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC);
    $toDecrypt = base64_decode($toDecrypt);
    return rtrim(mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $key, substr($toDecrypt, $iv_size), MCRYPT_MODE_CBC, substr($toDecrypt, 0, $iv_size)));
}
但这不起作用,它给了我垃圾字符串。

来自:

CryptoJS支持AES-128、AES-192和AES-256。它将选择 根据传入的密钥的大小而变化。如果使用密码短语, 然后它将生成一个256位密钥

在解密php端时,可能需要传递常量
MCRYPT_RIJNDAEL_256


有关php中AES加密/解密选项的更多信息:

base64_解码($toDecrypt);base64编码在哪里?如果也删除base64,则不工作?可能很有趣@是的,就是这样。您现在可以投票关闭。使用MCRYPT_RIJNDAEL_256不走运!CryptoJS仅支持AES,但
RIJNDAEL_256
不再是AES。只有
RIJNDAEL_128
与AES兼容。请注意,声明称高级加密标准(AES)也称为RIJNDAEL
var encrypted = CryptoJS.AES.encrypt("Message", "Secret Passphrase");
var decrypted = CryptoJS.AES.decrypt(encrypted, "Secret Passphrase");