You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP使用openssl_decrypt做AES-128-ECB解密结果与预期不符排查

根因分析
  • 密钥格式不匹配:AES-128 算法要求传入 16 字节长度的原始二进制密钥,你的代码中直接传入字符串 "0000000000000000",该字符串的每个字符对应 ASCII 编码的 0x30,实际生效的密钥是 16 个连续的 0x30 字节,和你预期的全 0 二进制密钥完全不符。
  • 其余配置逻辑正确:你已经对十六进制格式的密文做了 hex2bin() 转换为二进制传入解密函数,openssl_decrypt 第四个参数 3 对应 OPENSSL_RAW_DATA | OPENSSL_ZERO_PADDING,适配无填充的 AES ECB 解密场景,这两部分配置都没有问题。
  • 在线工具解密正常的原因:在线解密工具默认会将输入的十六进制格式密钥自动转换为二进制数据,使用的是正确的全 0 二进制密钥,因此解密结果符合预期。
修复方案

在密钥赋值后添加十六进制转二进制的逻辑即可,修复后的完整代码如下:

$encryptedText = "4181EF4A4690BC0B1281355489C96009";
$key = "0000000000000000";
// 将十六进制格式的密钥转换为原始二进制数据
$key = hex2bin($key);
$method = "aes-128-ecb";
$encryptedText = hex2bin($encryptedText);
$decryptedText = openssl_decrypt($encryptedText, $method, $key, 3);
var_dump($decryptedText);
echo "<br>";
var_dump(bin2hex($decryptedText));

运行代码后输出的十六进制结果和预期值 c704774b4a2f7080280000f5a5d104a8 完全一致。


内容的提问来源于stack exchange,提问作者Fabio Martinelli

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 07:54:06