免费在线 HMAC 与 HKDF 工具:HMAC-SHA256(HS256)等多算法签名,以及 RFC 5869 Extract+Expand;Hex/Base64 输出,密钥不出浏览器。
摘要:免费的在线 HMAC / HS256 生成器,并支持 RFC 5869 HKDF(Extract→PRK、Expand→OKM),SHA 系列哈希,Hex/Base64 输出,密钥不出浏览器。
本地工具可在 DevTools → Network 搜索输入内容,通常不会出现在请求中。
下一步
使用指南
HMAC(基于哈希的消息认证码)= 哈希 + 密钥,证明消息来自持钥方且未被篡改。本页同时提供 HKDF(RFC 5869 Extract + Expand):从高熵 IKM 派生带用途标签的密钥材料。HMAC 与 HKDF 计算均在浏览器本地完成。
1. 生成一个 HMAC 签名
发送方与接收方用相同的密钥和算法独立计算,结果相等即通过。Webhook 场景通常把签名放在 X-Signature 类请求头里传递。
- 模式选 HMAC,输入消息体(例如原始请求 payload)。
- 输入共享密钥。
- 选择哈希算法(SHA-256 是主流选择),生成十六进制签名。
2. 用 HKDF 派生用途密钥
- 模式切换到 HKDF;填入 IKM(DH/会话种子等已高熵材料)。
- 可选填 salt(上下文)与 info(用途标签,如 client-write-key)。
- 设定输出字节长度;对照结果区的 PRK(Extract)与 OKM(Expand)。
- info 尽量不要留空——它是域分离标签,避免不同用途密钥语义撞车。
- 对照 RFC 5869 附录向量时,把输入编码切到 Hex。
- 口令拉伸请用 PBKDF2/argon2(AES 工具的口令路径),不要用 HKDF。
3. 为什么必须用 HMAC 而不是 hash(secret+msg)
朴素拼接 hash(secret + message) 有一个结构性漏洞——长度扩展攻击:SHA-2 家族基于 Merkle-Damgård 结构,知道 hash(secret+msg) 与 msg 的长度后,攻击者无需密钥即可构造 hash(secret+msg+suffix) 的合法值,从而伪造带后缀的消息。HMAC 通过双哈希嵌套(inner/outer pad)从结构上免疫此类攻击。这就是所有签名规范都强制 HMAC 而非简单拼接的原因——不是惯例,是密码学必需。
4. 签名比对必须时序安全
- 普通的字符串相等比较在第一个不同字节处提前返回,攻击者可通过响应时间差逐字节爆破签名。
- 服务端验证用恒定时间比较(Node 的 crypto.timingSafeEqual、各语言的 constant-time compare),不要用 == 或 ===。
- 原始请求体逐字节参与计算:网关重排字段、附加空白都会让签名失配——这是联调时签名对不上的头号原因。
5. 防重放的时间戳与 nonce
- 签名消息里加入时间戳(如 timestamp + body 拼接后做 HMAC)。
- 服务端校验时间戳在 ±5 分钟窗口内,窗口外的直接拒绝。
- 高安全场景再加 nonce:一次性随机值,服务端记录已用 nonce 拒绝重放。
6. 输出格式、密钥长度与 HKDF 边界再强调
- 本页 HMAC 默认输出十六进制小写;若对接方要 Base64 或带前缀(sha256=…),在复制后按对方规范转换,不要假定「线上看到的格式」就是原始摘要。
- HMAC 密钥长度建议至少与哈希输出等长(SHA-256 → 32 字节);过短密钥会被内部填充,但不增加熵。
- HKDF 的 IKM 应已是高熵材料;口令、生日、短信验证码不是 IKM——口令路径用 PBKDF2/argon2。
- 同一密钥不要跨「签名」与「加密」复用;HKDF 的 info 标签就是为用途隔离准备的。
7. Webhook 联调:签名对不上时的固定顺序
先确认参与签名的字节:原始 body、还是 JSON 重新序列化后的字符串、是否含时间戳前缀——三者任一不一致都会满盘皆输。再确认算法与输出编码(hex / base64 / base64url)。然后才查密钥是否拷错环境。最后用恒定时间比较在服务端落地。本页适合在浏览器里用同一串 body 与测试密钥复现期望签名;不要把生产密钥贴进来。
常见问题
安全。HMAC 与 HKDF 计算都在浏览器本地完成,密钥和消息不会被发送到任何服务器。
支持 MD5、SHA-1、SHA-256、SHA-384、SHA-512 五种常用算法,基于 Web Crypto API 实现。对接 API 签名时 SHA-256 是主流选择;本页默认输出十六进制小写。
HMAC 用密钥参与哈希,只有持相同密钥的一方才能生成与验证,常用于 API 签名和 Webhook 校验;普通哈希不带密钥,只做完整性校验。朴素拼接 hash(secret+msg) 有长度扩展攻击漏洞——知道结果和消息长度后,无需密钥也能伪造带后缀消息的合法值;HMAC 的内外双垫层结构从根上免疫这类攻击。
按固定顺序查:先确认参与签名的是原始请求体、还是重新序列化后的 JSON 字符串、是否带时间戳前缀——网关重排字段或附加空白都会导致失配,这是头号原因;再核对算法与输出编码(hex / base64 / base64url);最后才怀疑密钥拷错了环境。服务端比对签名请用恒定时间比较,避免时序侧信道。
HS256 就是 HMAC-SHA256。本工具可在线计算 HMAC-SHA256(HS256),输出 Hex 或 Base64。若你要校验的是 JWT Token 的 HS256 签名,请改用 JWT 解码器并填入同一密钥。
支持。切换到 HKDF 模式可做 RFC 5869 的 Extract + Expand:输入 IKM、可选 salt/info 与输出长度,同时看到 PRK 与 OKM。HMAC 用于消息认证;HKDF 用于从高熵秘密派生带用途标签的密钥——info 标签尽量别留空,它是做域分离用的。口令拉伸请用 PBKDF2/argon2,不要用 HKDF。