如何在Python中对字符串进行SHA1-HMAC加密(匹配PHP结果)
解决Python HMAC-SHA1与PHP命令输出不一致的问题
你的核心问题是没有正确将十六进制字符串转换为原始字节流,PHP命令里的处理逻辑和你的Python代码实现不匹配:
PHP命令的逻辑拆解
- 消息:
echo -n "0x00000000035362f9" | xxd -r -p——xxd -r -p会忽略非十六进制字符(比如0x里的x),将剩余的十六进制字符串00000000035362f9解码为原始字节。 - 密钥:
-macopt hexkey:0080700040024c8581c2—— 直接将该十六进制字符串解码为原始字节作为HMAC密钥。
错误的Python代码原因
你之前的代码把十六进制字符串当作普通UTF-8文本编码成字节(比如字符0被转成0x30),而非将十六进制字符串解码为对应原始字节(比如00转成0x00),导致字节内容完全不符。
正确的Python实现
from hmac import new from hashlib import sha1 # 将密钥的十六进制字符串解码为原始字节 key_bytes = bytes.fromhex("0080700040024c8581c2") # 将消息的十六进制字符串(去掉0x前缀)解码为原始字节 msg_bytes = bytes.fromhex("00000000035362f9") # 计算HMAC-SHA1并输出十六进制结果 print(new(key_bytes, msg_bytes, sha1).hexdigest())
运行后会输出预期的结果:7289e7b135d54b86a462a53da93ef6ad28b902f8
内容的提问来源于stack exchange,提问作者lwashington27
相关产品推荐
相关产品推荐

