5

我正在寻找一种方法来对简单文本(5 到 6 个数字和/或字符)进行 2 路加密。问题是我想在 php 中进行加密,然后通过 Javascript 对其进行解密。对于 php,我已经使用 mcrypt_encode 进行了测试并且已经让它工作了,因此当我尝试用 javascript 解密它时(我使用的是 Crypto-js 库 - http://code.google.com/p/crypto-js / ) 我没有得到任何结果。这是我正在使用的 php 代码:

$key = "oijhd981727783hy18274";
$text = "1233";
$td = mcrypt_module_open(MCRYPT_RIJNDAEL_256, '', MCRYPT_MODE_CBC, '');
$iv = mcrypt_create_iv(mcrypt_enc_get_iv_size($td), MCRYPT_RAND);
$crypttext = mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $key, $text, MCRYPT_MODE_CBC,$iv);
echo base64_encode($crypttext);

然后这是我正在使用的Javascript代码:

var encrypted = CryptoJS.enc.Base64.parse("LiJU5oYHXRSNsrjMtCr5o2ev7yDFGZId85gh9MEXPeg=");
var key = 'oijhd981727783hy18274';
var decrypted = CryptoJS.AES.decrypt(encrypted, key);
document.write( decrypted.toString(CryptoJS.enc.Utf8) );

由于我只是在测试,我将 php 的输出直接复制/粘贴到 JS 中,看看它是否会返回任何结果,但这不会发生。由于我是加密/解密部分的新手,我可能会遗漏一些东西。任何建议将不胜感激。

附带说明一下,当我在这里阅读了很多关于使用其他类型的通信来传输数据的建议时,在这种情况下这是不可能的,因为我需要将此字符串传递给第三方软件,这将带来它在一个安全区域,我只能编辑 javascript,这就是为什么我试图加密 php 中的文本并将其放在网站的源代码中,第三方软件将从那里读取它,因为它是加密的并将其转移到安全部分,在那里我需要通过 Javascript 将其解密(我无法访问那里的 php)。

4

3 回答 3

5

因此,经过更多挖掘后,我来到了以下在线加密器/解密器,它把我带到了GitHub 存储库中的 gibberish-aes

在第一个链接的评论中,我发现这个 JS 库有一个 php 等价物,它似乎工作得相当好并且相当容易部署: https ://github.com/ivantcholakov/gibberish-aes-php

所以感谢 Lars 提供的答案,我会鼓励他打开存储库,我相信他会让某人的生活更轻松:)

于 2012-08-03T15:49:33.960 回答
3

从 CryptoJS 文档:

对于密钥,当您传递一个字符串时,它会被视为密码并用于派生实际密钥和 IV。或者您可以传递一个代表实际键的 WordArray。如果您传递实际密钥,则还必须传递实际 IV。

所以在你的行中

var decrypted = CryptoJS.AES.decrypt(encrypted, key);

“oijhd981727783hy18274”被视为创建密钥的密码,而不是实际密钥。

通过 IV 的工作方式如下:

var key = CryptoJS.enc.Hex.parse('000102030405060708090a0b0c0d0e0f');
var iv  = CryptoJS.enc.Hex.parse('101112131415161718191a1b1c1d1e1f');

var encrypted = CryptoJS.AES.encrypt("Message", key, { iv: iv });
于 2012-10-24T14:00:39.363 回答
0

前段时间我遇到了同样的问题。我终于从http://code.google.com/p/slowaes/使用了 SlowAES并进行了一些修复并将其移植到 PHP。

注意:官方来源已损坏,就像官方 PHP 端口一样。

如果您有兴趣,请告诉我。然后我会在 GitHub 上打开一个新的存储库,在那里你可以获取你需要的一切......

于 2012-08-03T15:12:21.013 回答