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

AES-128加密结果不一致求助:网页与OpenSSL CLI结果不同

AES加密结果不一致的核心差异点

以下是你忽略的关键配置细节:

1. 密钥处理逻辑差异

AES-128要求密钥为16字节(128位),你的原始密钥123456789仅9字节,不同工具的补全/派生逻辑完全不同:

  • 网页工具:直接将原始密钥用零字节(\x00)补全至16字节,最终密钥对应十六进制为31323334353637383900000000000000。
  • 命令1(-K参数):你传入的十六进制仅对应9字节,OpenSSL会自动补零到16字节,但因填充方式差异,结果仍不匹配。
  • 命令2(-k参数):即使添加-nosalt,OpenSSL仍会通过EVP_BytesToKey算法从原始密码派生密钥,而非直接使用原始字符串,必然导致密钥与网页工具不一致。

2. 明文填充方式不同

AES是块加密算法,需将明文填充至16字节的块大小:

  • 网页工具大概率使用零填充:对hello(5字节)补11个零字节,得到hello\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00。
  • OpenSSL默认使用PKCS#7填充:对hello补11个0x0B字节(填充字节的值等于需要填充的数量),得到hello\x0B\x0B\x0B\x0B\x0B\x0B\x0B\x0B\x0B\x0B\x0B。

两种填充方式生成的明文块完全不同,加密结果自然无法匹配。

3. 加密模式与IV的一致性确认

需确认网页工具的加密模式是否为CBC,以及IV是否为全零:

  • 若网页工具默认使用ECB模式(无需IV),而你用了CBC模式,结果必然不同。
  • 若网页工具的IV不是全零,即使其他配置一致,加密结果也会差异巨大。

匹配网页结果的OpenSSL命令

要得到和网页一致的结果,需对齐所有配置:

# 手动填充零字节后加密,确保和网页填充逻辑一致
echo -n -e "hello\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" | openssl aes-128-cbc -K 31323334353637383900000000000000 -iv 00000000000000000000000000000000 -a

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 20:01:12