hmac.new() 的 key 和 msg 必须为 bytes 类型,需用 .encode("utf-8") 显式转换;生成签名须调用 .hexdigest() 得十六进制字符串;时间戳、nonce、方法、路径等必须参与拼接签名原文,且与服务端逐字节一致。

hmac.new() 的 key 和 msg 参数必须是 bytes 类型
Python 的 hmac.new() 不接受 str 类型的密钥或消息,直接传入字符串会抛出 TypeError: key: expected bytes, but got str。这是最常卡住新手的第一步。
常见错误写法:hmac.new("my_secret", "data", digestmod=hashlib.sha256) —— 这会立即报错。
- 正确做法:对 key 和 msg 都显式编码,例如
hmac.new(b"my_secret", b"data", digestmod=hashlib.sha256) - 如果原始数据是变量(比如
api_key = "abc123"、body = '{"id": 1}'),统一用.encode("utf-8")转换:hmac.new(api_key.encode("utf-8"), body.encode("utf-8"), digestmod=hashlib.sha256) - 注意:空字符串也要编码成
b"",不能传""
生成 hex 校验值时别漏掉 .hexdigest()
调用 hmac.new(...).digest() 返回的是 bytes 类型的二进制摘要,而绝大多数 API 要求 header 或 query 中传递的是十六进制字符串(如 "a1b2c3...")。直接把 digest() 结果塞进请求,会导致服务端解析失败或校验不匹配。
Python 3.14.2是Python编程语言在2025年12月5日发布的稳定版本,属于3.14系列的第二个维护更新。该版本包含了18项修复,重点解决了多进程、数据类及正则表达式等模块的回归问题,并修复了CVE-2025-12084等安全漏洞。此版本标志着自由线程模式(移除GIL)正式获得官方支持,是Python发展的重要里程碑。
- 务必使用
.hexdigest():它返回小写十六进制字符串,符合 RFC 和主流 API 规范 -
.digest()仅在需要原始字节(如进一步加密或拼接)时才用,日常 API 校验几乎不用 - 示例:
sig = hmac.new(k, msg, hashlib.sha256).hexdigest()→ 得到"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
时间戳和 nonce 必须参与签名计算
只对请求体(body)做 HMAC 是不安全的——攻击者可重放请求。真实 API(如 AWS Signature、Coinbase Pro、很多金融类接口)要求将时间戳(timestamp)、随机数(nonce)、HTTP 方法、路径等一起纳入签名原文。
典型拼接方式(以 POST /orders 为例):
message = f"POST\n/orders\n{timestamp}\n{nonce}\n{json_body}"
- 换行符
\n是分隔符,必须严格一致(不能用\r\n或空格) - timestamp 通常为秒级或毫秒级 Unix 时间戳(如
str(int(time.time()))),服务端会校验时间窗口(如 ±30 秒) - nonce 应为每次请求唯一(可用
uuid.uuid4().hex或secrets.token_urlsafe(16)) - 若 API 文档指定排序规则(如按字母序拼接 query 参数),必须严格遵循,否则签名不一致
对比服务端签名时注意大小写和编码一致性
客户端生成的 signature 和服务端比对失败,80% 情况不是算法问题,而是两边对“同一段原文”的理解不同。
- 检查服务端文档是否要求对 body 做规范化处理(如移除空格、排序 JSON key、URL 编码 query 参数)
- 确认双方使用的 hash 算法完全一致:
hashlib.sha256≠hashlib.sha512,也 ≠hashlib.sha256().name字符串误用 - 某些 API 要求 signature 做 Base64 编码(而非 hex),此时要用
base64.b64encode(hmac_obj.digest()).decode("ascii") - header 中传递时注意字段名大小写(如
X-Signaturevsx-signature),部分服务端区分大小写
大量免费API接口:立即使用
涵盖生活服务API、金融科技API、企业工商API、等相关的API接口服务。免费API接口可安全、合规地连接上下游,为数据API应用能力赋能!










