我有一个js脚本加密'Blader'数据。如果我加密它,它返回
的输出JS-SCRIPT结果
uqnOrevjCc2YCvY3uKNjzA==
现在,作为比较基础的答案,我写了或者更确切地说在PHP中搜索了与我的JS脚本类似的等效脚本。令我感到困惑的是,逻辑是正确的和正确的,但答案是不同的。在我使用mcrypt的php脚本上,我将这个结果放在
中mcrypt RESULT
HzfWFNKcAmkO6zJEYjbG4Q==
如果你注意到,长度是相同的,这意味着我所做的代码的逻辑/修改是正确的。现在正如我之前所说,我在这里复制了一些帖子的脚本。
这是我认为使用加密JS的JS脚本
function crypto_encrypt(text) { //This is for JS
var keyBase64 = CryptoJS.enc.Base64.parse("ITU2NjNhI0tOc2FmZExOTQ==");
var iv = CryptoJS.enc.Base64.parse('AAAAAAAAAAAAAAAAAAAAAA==');
var encrypted = CryptoJS.AES.encrypt(CryptoJS.enc.Utf8.parse(text), keyBase64,
{
keySize: 128 / 8,
iv: iv,
mode: CryptoJS.mode.CBC,
padding: CryptoJS.pad.Pkcs7
//padding: CryptoJS.pad.ZeroPadding
});
// Returns a Base64 encoded string.
return encrypted;
}
以下是我在mcrypt / mycrypt中找到的代码
<?php
$encrypted = "Blader";
$iv = "0000000000000000"; // iv_base64 from JS
$key = hexdec("213536363361234b4e736166644c4e4d"); // key_base64 from JS
$plaintext = mcrypt_decrypt( MCRYPT_RIJNDAEL_128, $key, $encrypted, MCRYPT_MODE_CBC, $iv );
echo base64_encode($plaintext);
?>
现在的问题是,我尝试从UTF8_encode到所有base64_encode和解码,但仍然找不到什么是错的,我很好,这是可以实现的,因为我注意到JS-Script中的IV不同于我在mcryp(PHP)中试图回应它。任何建议,意见和建议都将受到高度赞赏。
和平了。
答案 0 :(得分:0)
首先,您必须使用PHP中的相同的密钥和IV ,就像在CryptoJS中一样,或者它只是不起作用。你比较了钥匙和IV的价值吗?他们不匹配。
其次,你必须在每一侧使用相同的填充。你有没看过MCrypt怎么垫?它使用零填充。你的两个明文不同,因为填充是明文的一部分。
最后,您不想在这里使用mcrypt_ 加密而不是mcrypt_decrypt吗?
如果您匹配密钥和IV,填充,并在PHP中加密,您将得到相同的结果(我用\ x0a - 10手动填充 - 以匹配您的PKCS# 7填充):
$encrypted = "Blader\x0a\x0a\x0a\x0a\x0a\x0a\x0a\x0a\x0a\x0a";
$iv = base64_decode('AAAAAAAAAAAAAAAAAAAAAA==');
$key = base64_decode('ITU2NjNhI0tOc2FmZExOTQ==');
$plaintext = mcrypt_encrypt( MCRYPT_RIJNDAEL_128, $key, $encrypted, MCRYPT_MODE_CBC, $iv );
echo base64_encode($plaintext);
uqnOrevjCc2YCvY3uKNjzA==