2

我想在javascript中加密。在 PHP 中解密。
JavaScript AES 加密库是 CryptoJS。
PHP AES 加密库是 mcrypt。

我得到了不正确的结果。
得到类似'I4��L$�"�"E̹_��zHe����V���:�'的结果。

  • 加密 (JavaScript)

encrypt = CryptoJS.AES.encrypt('HelloWorld', 'test', {mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.ZeroPadding });

  • 解密 (PHP)

$ivSize = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_CBC);
$iv = mcrypt_create_iv($ivSize, MCRYPT_RAND);
mcrypt_decrypt(MCRYPT_RIJNDAEL_256, 'test', $encrypt, MCRYPT_MODE_CBC, $iv);

哪里错了?
谢谢你。

4

1 回答 1

0

如上面评论中所述,SSL 是您真正保护任何数据的唯一方法,因为

  1. 如果没有 SSL,任何人都可以更改或嗅探您的 Javascript 或网页,因此无法信任它。
  2. Javascript 确实不能很好地允许基于非字符的数据。(即散列、编码视频等),因为所有数据通常在内部静默转换为 utf-16 或 utf-8。

最后一点很可能是导致您的问题的原因。每一端的 AES 库都像可以访问二进制数据一样进行加密,但是,Javascript 告诉传输加密数据在特定字符集中。您可能想尝试 utf8decode 或使用 iconv() 将其转换为真正的二进制数据。

于 2013-04-24T14:22:24.250 回答