← 返回工具指南
工具指南HMACAPI 签名SHA-256接口安全工具

HMAC 签名怎么生成?API 鉴权、密钥、SHA-256 和验签指南

HMAC 常用于 API 请求签名,可以验证消息完整性和密钥持有者。这里讲签名内容、密钥、算法和常见验签错误。

打开配套工具 →

很多开放 API 会要求请求签名,HMAC 是常见方案。它使用共享密钥和消息内容计算签名,服务端用同样方式验证。

你可以用 HMAC 签名生成器 测试签名结果。

HMAC 解决什么

HMAC 可以帮助验证:

它不负责加密内容。请求体仍然可能被看到,所以传输层还需要 HTTPS。

签名内容必须一致

常见错误是前后端签名字符串不一致:

验签失败时,先打印待签名原文,而不是只看最终签名。

密钥要保密

HMAC 密钥不能放在前端代码里。浏览器里的代码用户都能看到,密钥应该只在服务端保存。

测试时可以用工具生成签名,生产系统要在后端实现。

调试时先固定样本

接口签名问题最好先准备一组固定样本:固定密钥、固定时间戳、固定请求体、固定参数顺序。前后端都用这组样本计算,结果一致后再接入真实请求。否则每次时间戳都变,很难判断到底是算法错还是数据错。

如果服务端要求把 method、path、query、body、timestamp 拼在一起,文档里必须写清分隔符和编码规则。空字符串是否参与签名、JSON 字段顺序是否稳定、中文是否先编码,都要统一。

防重放也要考虑

HMAC 只能证明请求知道密钥和内容没有变,不能天然阻止别人复制同一条请求重复发送。实际 API 往往还会加入时间戳、nonce 或请求 ID,并在服务端设置有效期和去重逻辑。

错误信息要收敛

生产环境里不要把密钥、完整待签名字符串或服务端计算出的签名直接返回给调用方。调试环境可以详细记录,正式环境只返回统一的签名失败原因,并在服务端日志里保留足够排查的信息。

总结

HMAC 是 API 签名常用方案,重点是密钥保密和待签名字符串完全一致。

调试签名时,可以用 HMAC 签名生成器 对照服务端结果,逐项排查编码、排序和换行。