[英]Decrypt a string in PHP, crypted in JS with crypto
我正在尝试解密 PHP 中的字符串,我可以在 JS 中完成,但我不能通过 PHP 完成。
密码学新手,我尝试恢复我的原始字符串,但找不到解决方案。
所以我在 JS 中有以下代码:
const p1 = ['abc', 1, 'def', 'hij'].join('a');
let p2 = crypto.createHash('md5').update(p1, 'ascii').digest('hex') + 'a' + p1 + 'a';
while (p2.length % 16 > 0) p2 += ' ';
let result = crypto.createCipheriv('aes-128-ecb', 'aeda94ad8azd', '').update(p2, 'ascii', 'hex');
PHP 中的此代码:
$p1 = implode('a', ['abc', 1, 'def', 'hij']);
$p2 = hash('md5', $p1, false) . 'a' . $p1 . 'a';
dd($p2);
while (strlen($p2) % 16 > 0) $p2 .= ' ';
$result = openssl_encrypt($p2, 'aes-128-ecb', 'aeda94ad8azd', 0);
JS 结果:
让 p2 结果 = 7fbe3256bd8e9ac3e9b2e2ac9c1c812aaabca1adefahija p2 结果 while = 与 P2 相同,末尾有一个空格 让结果 = a7222dbd06b1ae0ea421ac968eba780f0e0e23317c25bab0ecf423b6ff95f1e25ede0bc65c15
PHP 结果:
$p2 结果 = 7fbe3256bd8e9ac3e9b2e2ac9c1c812aaabca1adefahija $p2 结果 while = 与 p2 相同,末尾有一个空格
$result = wE5FpEuPuWdL8D06y/jiqRB7kehRcLcBmI16AncqsKWeeqWm8Tj08anFBrnD0JWCP5/ihLo0AUZr0/+MBDjQvw==
我在 openssl_decrypt 中做错了什么? 我没有使用正确的function?
等待大家的帮助谢谢大家。 祝你今天过得愉快
我试了一下,但你在 Node.js 中使用了 Javascript,我没有使用它。 尽管如此,给出答案还是很有用的,因为我离你想要的结果有点近了。
首先,我注意到您的 JS 结果是十六进制的,而 PHP 结果可能是 Base64。需要进行一些转换。 我不得不使用原始结果,并删除填充以获得与您一样长的十六进制字符串。 PHP 代码为:
$raw = openssl_encrypt($p2,
'aes-128-ecb',
'aeda94ad8azd',
OPENSSL_RAW_DATA | OPENSSL_ZERO_PADDING);
$result = bin2hex($raw);
现在的结果是:
c04e45a44b8fb9674bf03d3acbf8e2a9107b91e85170b701988d7a02772ab0a59e7aa5a6f138f4f1a9c506b9c3d09582
相同类型(十六进制)和字符串长度,但不相同。 有两件事可能导致差异:
无论如何,我希望这有点用处。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.