【发布时间】:2021-11-10 17:28:59
【问题描述】:
我尝试通过 PHP 7.4 (Laravel) 和 OpenSSL 使用 DES-ECB 加密值,并尝试使用在线工具 https://emvlab.org/descalc/ 加密值,结果符合预期。
密钥:96187BBAB2BD19ACF899B74FB4E37972
输入数据:F01DCCE40F8C365ADE0A7DC03BC11DDE
加密数据是在线工具上的355A627E977D8ECF4953C98D801E472F。
https://emvlab.org/descalc/?key=96187BBAB2BD19ACF899B74FB4E37972&iv=0000000000000000&input=f01dcce40f8c365ade0a7dc03bc11dde&mode=ecb&action=Encrypt&output=D5131A2B35766D371420F679F15969FF
当下一个用 PHP 编写的代码时,我无法复制结果:
$data = "F01DCCE40F8C365ADE0A7DC03BC11DDE";
$key = "96187BBAB2BD19ACF899B74FB4E37972";
$encrypted = openssl_encrypt($data, 'DES-ECB', $key, OPENSSL_RAW_DATA | OPENSSL_NO_PADDING);
echo base64_encode($encrypted); // KV8Vie63pG2ZyjW7U5NRJUwOrbsEt+lnG1hNyS331Yk=
有没有办法获得与在线工具相同的字符串? 谢谢!
【问题讨论】:
-
我确定数据和密钥是十六进制编码的,所以第一步你应该使用 hex2bin 将其转换为二进制。第二:我怀疑在线工具没有使用“无填充”,而是使用 PKCS#7 填充(或者可能使用 x00 填充)。
标签: php laravel algorithm encryption openssl