PHP 3DES CBC加密结果不符,请求修正代码匹配预期输出
修正PHP 3DES CBC加密代码以匹配预期结果
你的代码存在三个关键问题,导致输出与在线工具结果不符:
- IV格式错误:3DES CBC要求IV为8字节(64位)的二进制数据,原代码使用的是ASCII字符串"00000000",并非8字节全0的二进制值。
- 加密结果格式错误:未指定
OPENSSL_RAW_DATA参数,导致openssl_encrypt返回base64编码的字符串,而非原始加密字节流,后续bin2hex处理的是base64字符串而非加密数据。 - 填充方式不匹配:在线工具默认使用PKCS#7填充,而原代码指定了
OPENSSL_ZERO_PADDING,填充逻辑不一致。
修正后的代码如下:
<?php $plaintext = hex2bin('781723860c06c2264608f919887022120b795240cb7049b01c19b33e32804f0b'); $algorithm = "DES-EDE3-CBC"; $key = hex2bin('AB94FDECF2674FDFB9B391F85D7F76F2'); // 生成8字节全0的IV(16位十六进制转二进制) $iv = hex2bin('0000000000000000'); // 加密:获取原始二进制结果,使用默认PKCS#7填充 $encrypted = openssl_encrypt($plaintext, $algorithm, $key, OPENSSL_RAW_DATA, $iv); echo bin2hex($encrypted); ?>
运行这段代码将输出预期结果:72C29C2371CC9BDB65B779B8E8D37B29ECC154AA56A8799FAE2F498F76ED92F2
内容的提问来源于stack exchange,提问作者Phong Duong
相关产品推荐
相关产品推荐

