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

Python与OpenSSL的HMAC SHA256摘要结果不一致问题排查

HMAC SHA256签名:Python与Windows OpenSSL命令输出不一致的解决办法

问题场景

需要用Python基于HMAC SHA256算法,通过私钥和消息生成签名,但不管怎么调整,Python代码生成的结果和Windows命令行里用OpenSSL生成的始终对不上。哪怕用最简单的字符串(比如333)同时当密钥和消息测试,结果还是存在差异。试过调整编码格式、切换字符串类型等各种办法,都没解决问题。

排查原因

折腾半天发现,问题根本不在Python代码或者OpenSSL本身,而是Windows系统的echo命令不支持Linux下的-n参数。之前用的OpenSSL命令大概是这样的:

echo -n "333" | openssl dgst -sha256 -hmac "333"

Windows里的echo会直接忽略-n参数,还会自动在输出末尾加一个换行符,相当于实际传给OpenSSL的消息是333\n,而Python代码里是直接用纯字符串"333"计算签名,两者的输入消息不一样,结果自然无法匹配。

解决方法

把echo命令换成带/p=参数的写法,这个参数会让echo输出指定内容但不添加换行符。正确的OpenSSL命令如下:

echo /p="333" | openssl dgst -sha256 -hmac "333"

对应的Python参考代码(用标准库即可实现,无需依赖pyopenssl):

import hmac
import hashlib

key = b"333"
message = b"333"
signature = hmac.new(key, message, hashlib.sha256).hexdigest()
print(signature)

现在再分别运行两边的命令,生成的签名就能完全一致了。

环境信息

  • Windows 10
  • OpenSSL 3.2.1
  • Python 3.10
  • pyopenssl 24.0.0

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 16:59:51