PHP加密和CryptoJS解密
PHP encryption and CryptoJS decryption
我在解密(使用CryptoJs)我的PHP加密数据时遇到问题。这是我的PHP加密:
function encrypt($pure_string, $encryption_key, $iv) {
$encrypted_string = mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $encryption_key, utf8_encode($pure_string), MCRYPT_MODE_CBC, $iv);
return $encrypted_string;
}
function cripto()
{
$crypto_key = "230e8cb8c43d532f389ff0e2b5337919";
$data_to_encrypt = "Data to encrypt";
$iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC);
$iv = mcrypt_create_iv($iv_size, MCRYPT_RAND);
$ciphertext = $this->encrypt($data_to_encrypt, $crypto_key, $iv);
return array("iv" => pack('H*', $iv), "chipertext" => base64_encode($ciphertext),"key" => $crypto_key);
}
这是我的JavaScript代码(php加密函数的结果存储在加密变量中):
var ciphertext = <?php echo '"'.$encrypted["ciphertext"].'"'; ?>;
var iv = <?php echo '"'.$encrypted["iv"].'"'; ?>;
var crypto_key = <?php echo '"'.$encrypted["key"].'"'; ?>;
iv = CryptoJS.enc.Hex.parse(iv);
ciphertext = CryptoJS.enc.Base64.parse(ciphertext);
var decrypted = CryptoJS.AES.decrypt(ciphertext, crypto_key,{ iv: iv });
console.log(decrypted.toString(CryptoJS.enc.Utf8));
我的解密值总是一个空字符串,我不知道为什么。
您有两个问题:
- PHP使用零填充(0x00的0-15字节的填充),但CryptoJS默认使用PKCS#7填充。这些是不相容的
- CryptoJS的
decrypt()
函数需要一个CipherParams对象,您可以通过传递具有ciphertext
属性集的对象来简单地模拟该对象
一起:
iv = CryptoJS.enc.Hex.parse(iv);
ciphertext = CryptoJS.enc.Base64.parse(ciphertext);
var decrypted = CryptoJS.AES.decrypt({ ciphertext: ciphertext }, crypto_key, {
iv: iv,
padding: CryptoJS.pad.ZeroPadding
});
console.log(decrypted.toString(CryptoJS.enc.Utf8));
别忘了包括pad-zeropadding-min.js.
请记住,JavaScript密码学有其正当性问题。您真的应该使用SSL,因为没有SSL,这只是混淆(密钥和密文一起发送)。
最好在PHP中进行PKCS#7填充,并在CryptoJS中保留默认值。
相关文章:
- AES-CTR 在 Go 中加密,在 CryptoJS 中解密
- 使用CryptoJS进行渐进式AES解密
- 可以't使用CryptoJS解密字符串
- 如何在CryptoJS(nodejs/web浏览器)中解密AES 128
- 创建 CryptoJS AES 密码加密器以在 .NET 中解密
- 使用CryptoJS解密图片并将其插入页面
- 如何使用 CryptoJS 解密加密字符串 (SHA512)
- CryptoJS AES CBC 256 解密在明文中间添加了额外的字节
- 填充无效,无法使用CryptoJS 3.1加密和服务器端AesCryptoServiceProvider解密来删除
- 如何在MVC中使用cryptoJs解密代码背后的加密值
- CryptoJS中的加密和mCrypt中的解密工作不正常
- CryptoJS使用密码短语加密AES,但PHP解密需要密钥
- 使用cryptojs解密不起作用
- PHP加密和CryptoJS解密
- CryptoJS解密C#DES加密文件失败
- CryptoJS AES加密和JAVA AES解密值不匹配
- 使用CryptoJS加密和从Objective-C解密
- 使用CryptoJS在Javascript中加密,在Java中解密
- CryptoJS不能忠实地解密非拉丁字符
- c#加密和JS解密(CryptoJS)