【发布时间】:2014-08-14 20:04:21
【问题描述】:
我有一个 js 脚本来加密“Blader”数据。如果我对其进行加密,它会返回
的输出JS 脚本结果
uqnOrevjCc2YCvY3uKNjzA==
现在,将这个答案作为比较的基础,我写了或者说在 PHP 中搜索了一个与我的 JS 脚本类似的等效脚本。让我感到困惑的是,逻辑是好的和正确的,但答案是不同的。在我使用 mcrypt 的 php 脚本上,我在
中得到了这个结果mcrypt 结果
HzfWFNKcAmkO6zJEYjbG4Q==
如果您注意到,长度是相同的,这意味着我对代码所做的逻辑/修改是正确的。现在正如我之前所说,我将脚本复制到这里的一些帖子中。
这是我认为使用 crypto-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 不同于IV 在 mcryp(PHP) 中我试图回应它的一切。任何建议、cmets 和建议将不胜感激。
和平相处。
【问题讨论】:
-
过去我曾尝试在网页中实现某些散列和加密功能。我了解到,网页客户端上的任何加密功能都是有益的用例很少。请问你的目的是什么?
-
我们将尝试检查是否可以使用自己的 php 函数复制 Javascript 函数。我想在编码功能方面更加灵活,所以我想通过在 php 中使用 mcrypt 来重现 cryptoJS 的功能。顺便谢谢你的回答。
-
根据 mcrypt_decrypt php 文档页面上的this comment,AES 和 Rijndael 在不同的实现中表现不同。
-
所以据我了解,这两个产生的输出永远不会相似?我说的对吗?
-
我不太擅长阅读加密语言,但类似问题中的this answer 可能会提供一些额外信息。
标签: javascript php encryption