【发布时间】:2021-03-18 14:44:27
【问题描述】:
在 PHP 中,我使用 openssl_decrypt($encryptData,'AES128',$key, OPENSSL_ZERO_PADDING|OPENSSL_RAW_DATA),我需要在 JS 上使用相同选项的完全相同的东西,所以我使用 CryptoJS 和这个函数 cryptoJS.AES.decrypt(encryptData, key, {padding: cryptoJS.pad.ZeroPadding}).toString()。
使用 PHP,我的解码消息以 C7 开头,并带有其他十六进制字符。但在 JS 中只有十进制值。
这里的 encryptData 和 key 在 PHP 和 JS 上的值完全相同。但是 cryptoJS 返回的东西与 PHP 不同。
我不知道可能是什么问题。我尝试使用 UTF8 或 Base64 更改我的值的基础。但没有任何效果。
如何将此功能转换为加密并使其正常工作? 谢谢!
PHP 示例:
$encryptData = hex2bin("D5F630E93F36C21293012D78E5A384F1");
$key = hex2bin("A254FE00A791AA74386E8DEF3712B256");
var_dump(bin2hex(openssl_decrypt($encryptData,'AES128', $key, OPENSSL_ZERO_PADDING|OPENSSL_RAW_DATA)));
//result : c704469332aa61804601008a92dc10e5
JS 示例:(当然 hex2bin 返回与 PHP 相同的输出)
let encData = hex2bin("D5F630E93F36C21293012D78E5A384F1");
let key = hex2bin("A254FE00A791AA74386E8DEF3712B256");
let data = bin2hex(cryptoJS.AES.decrypt(encData, key, {padding: cryptoJS.pad.ZeroPadding}).toString());
console.log(data);
//result : 326638346632336661323135353832343236376139343564
每次我在 JS 上重新加载时结果都会发生变化。
【问题讨论】:
-
给一个完整的数据集(明文、密钥和密文)和两个最小的例子来重现这些例子怎么样?
标签: javascript php openssl cryptography cryptojs