【发布时间】:2014-02-06 11:28:05
【问题描述】:
我正在尝试使用 CryptoJS 在 Javascript 中加密并在 PHP 中解密。 JS代码为:
var salt = CryptoJS.lib.WordArray.random(128/8);
var key256Bits500Iterations = CryptoJS.PBKDF2("Secret Passphrase", salt, { keySize: 256/32, iterations: 500 });
var iv = CryptoJS.enc.Hex.parse('101112131415161718191a1b1c1d1e1f'); // just chosen for an example, usually random as well
encrypted = CryptoJS.AES.encrypt("Message", key512Bits1000Iterations, { iv: iv });
var data_base64 = crypted.ciphertext.toString(CryptoJS.enc.Base64);
var iv_base64 = crypted.iv.toString(CryptoJS.enc.Base64);
var key_base64 = crypted.key.toString(CryptoJS.enc.Base64);
而PHP如下:
$encrypted = base64_decode($data_base64);
$iv = base64_decode($iv_base64);
$key = base64_decode($key_base64);
$plaintext = mcrypt_decrypt( MCRYPT_RIJNDAEL_128, $key, $encrypted, MCRYPT_MODE_CBC, $iv);
echo ($plaintext);
这不会返回正确的答案。
我不确定事情在哪里进展不顺利!我需要自己做静脉注射,但如果我这样做的话:
CryptoJS.AES.Encrypt("Message", "Secret Passphrase");
var data_base64 = crypted.ciphertext.toString(CryptoJS.enc.Base64);
var iv_base64 = crypted.iv.toString(CryptoJS.enc.Base64);
var key_base64 = crypted.key.toString(CryptoJS.enc.Base64);
它确实在 PHP 代码中成功运行——只有 key_base64 不是可以更改的,它必须是用户记住的......然后它给了我一个盐来从密码中获取密钥输入并 IDK 它是如何使用 CryptoJS 实现的
【问题讨论】:
标签: javascript php encryption aes cryptojs