【问题标题】:Encrypto in JavaScript and Decrypto in PHP在 JavaScript 中加密和在 PHP 中解密
【发布时间】:2013-02-12 08:10:14
【问题描述】:

我想在 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);

哪里出错了?
谢谢。

【问题讨论】:

  • 你为什么要这样做?
  • 您确实意识到您必须在您的网页中发布您的密钥以供全世界查看?这使得加密变得毫无意义。
  • 基本上,任何查看您的 JavaScript 源代码的人都可以解密正在传递的数据。如果您想保护传输中的数据,您应该使用 SSL。
  • 感谢您的回复!我认为使用 AES 不使用 HTTPS 可以轻松完成。抱歉...错过了信息。加密的平台是 Titanium。我认为源代码是编译的,没有问题。
  • 类似问题here已回答。

标签: php javascript encryption cryptojs


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 2015-02-24
    • 2011-08-09
    • 2018-09-27
    • 2019-06-26
    • 2017-05-04
    • 1970-01-01
    • 2021-04-13
    相关资源
    最近更新 更多