我想在 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 是您真正保护任何数据的唯一方式,因为
- 如果没有 SSL,任何人都可以更改或嗅探您的 Javascript 或网页,因此无法信任。
- Javascript 确实不能很好地支持基于非字符的数据。 (即哈希、编码视频等)因为所有数据通常在内部静默转换为 utf-16 或 utf-8。
这最后一点很可能是导致您的问题的原因。每一端的 AES 库都进行加密,就好像它可以访问二进制数据一样,但是,Javascript 告诉传输加密数据在某个字符集中。您可能想尝试 utf8decode 或使用 iconv() 将其转换为真正的二进制数据。
关于php - JavaScript 中的加密和 PHP 中的解密,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15096511/