php - JavaScript 中的加密和 PHP 中的解密

标签 php javascript encryption cryptojs

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

哪里不对?
谢谢。

最佳答案

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

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

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

关于php - JavaScript 中的加密和 PHP 中的解密,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15096511/

相关文章:

php - 使用奇数类和偶数类交替注释颜色

php - mysqli_stmt_bind_result 的奇怪问题

javascript - 如何使用 jQuery 和 Ajax 将动态对象列表发送到 MVC 中的 Controller

javascript - Disqus 评论未通过 https 加载

linux - 家庭服务器的廉价双因素身份验证?

java - GNU 加密货币 : JCE cannot authenticate the provider GNU-CRYPTO

php - 事件驱动的 PHP 框架?

javascript - window.postMessage() + iframes + 开发者工具的安全问题

c# - .NET 中的 SHA1CryptoServiceProvider 与 UNIX shasum 不匹配

javascript - 动态选择选项php和mysql