HMAC 计算器
用共享密钥对消息计算认证码,支持四种摘要算法和两种密钥格式,可用于接口签名调试。
HMAC 计算
密钥与内容只在浏览器内参与计算,不上传服务器。
HMAC 是什么
HMAC(Hash-based Message Authentication Code,基于哈希的消息认证码)由 RFC 2104 定义,用一个共享密钥和一段消息算出固定长度的摘要。与普通哈希的区别在于:没有密钥的人无法伪造出正确的摘要,所以它能同时验证消息的完整性和来源。
计算过程并不复杂:先把密钥按块长补齐或哈希压缩,再与固定填充值异或,对消息做一次哈希,最后再套一层外层哈希。这两层结构使它不会像裸哈希那样受到长度扩展攻击影响。
典型使用场景
- 开放接口签名:调用方用 AppSecret 对参数串算 HMAC,服务端重算比对,防止参数被篡改
- Webhook 校验:主流平台的回调都会带一个签名字段,用同样的方式验证请求确实来自平台
- JWT 的 HS256 签名:本质上就是 HMAC-SHA256,密钥即签名密钥
- 内部服务间调用鉴权:比固定 Token 更安全,因为签名与内容绑定
对接时最容易出错的三个地方
一是待签串的拼接顺序和分隔符必须与文档完全一致,多一个空格结果就不同;二是编码方式要统一,中文参数尤其容易在 UTF-8 和 GBK 之间踩坑;三是密钥的传递形式,有的平台给的是十六进制字符串,有的给的是原文,用错会导致签名永远对不上。
算法选择参考
| 算法 | 输出长度 | 适用场景 |
|---|---|---|
| HMAC-SHA1 | 40 位十六进制 | 兼容老系统,新项目不建议 |
| HMAC-SHA256 | 64 位十六进制 | 接口签名的主流选择,JWT HS256 即此 |
| HMAC-SHA384 | 96 位十六进制 | 与 SHA384 体系配套 |
| HMAC-SHA512 | 128 位十六进制 | 高安全要求场景,计算开销略高 |
涉及密评的信息系统,签名类算法应按要求选用 SM3 或 SM2,HMAC-SM3 属于可选组合。
相关产品与指南
常见问题
HMAC 和普通哈希有什么区别?▼
普通哈希任何人都能算,只能证明内容没变;HMAC 需要一个共享密钥,没有密钥就算不出正确结果,所以能同时证明内容完整和来源可信。接口签名、回调校验都用它。
接口签名总是对不上是什么原因?▼
多数是待签串拼接不一致。检查四点:参数排序规则、分隔符、空值参数是否参与、中文的编码方式。其次是密钥形式搞错,有些平台给的密钥是十六进制字符串而不是原文,需要按十六进制解析。
HMAC 和数字签名该选哪个?▼
HMAC 是对称的,双方共享同一密钥,计算快,适合服务端之间的接口鉴权;数字签名是非对称的,用私钥签、公钥验,验证方拿不到签名密钥,适合需要多方验证或不可否认的场景,比如电子签章。
JWT 的 HS256 就是 HMAC 吗?▼
是的。HS256 表示使用 HMAC-SHA256 对头部和载荷签名,密钥是双方共享的字符串。这也是为什么 JWT 的密钥一旦泄露,任何人都能伪造令牌,生产环境建议改用 RS256 或 ES256。
密钥长度有要求吗?▼
HMAC 的安全性不依赖密钥比摘要块更长,但过短的密钥会降低暴力破解难度。一般建议密钥长度不低于摘要输出长度,比如 HMAC-SHA256 用 32 字节以上的随机密钥。