HMAC 生成器

HMAC 生成器

使用 HMAC 签名并验证消息。在你的浏览器中计算七种算法 — 数据不会离开此页面。

输入消息和密钥以开始。七个 HMAC 值将实时显示在此处。

算法

示例

点击预设以加载已知消息和密钥。

关于 HMAC 生成器

HMAC(基于哈希的消息认证码)是 webhook 签名验证的主力。给它一个消息和一个密钥,它会产生一个有键摘要,接收方用相同的密钥可以验证。 此工具在你的浏览器中运行七种 HMAC 变体 — 不会向任何服务器发送数据 — 并为你提供每行的「复制为 curl header」和「复制为 Python 片段」操作, 以便你可以将结果直接放入 shell 会话或验证脚本中。

七种算法

  • HMAC-MD5 — 旧版(Stripe v1 webhooks、RADIUS、一些内部协议)。仅出于兼容性而包含;不要用于新设计。
  • HMAC-SHA-1 — 在旧版 webhook 提供商和 AWS v2 签名中仍然常见。
  • HMAC-SHA-256 — 主力。Stripe v2、GitHub、Slack、Shopify 以及 JWT HS256 的默认都使用它。
  • HMAC-SHA-512 — 一些银行和高安全性 API 使用它。
  • HMAC-SHA3-256HMAC-SHA3-512 — NIST FIPS 202 SHA-3 系列,在更新的规范和 IoT 签名协议中越来越多地被使用。
  • HMAC-RIPEMD-160 — 用于比特币地址派生和少数欧洲银行协议。

以常数时间验证签名

工具的验证部分粘贴传入的签名(带有提供商特定的前缀解析 — 见下文),并使用逐字节 XOR 累加器将其与新计算的值进行比较, 该累加器的运行时间与输入长度成正比,而不是与第一个不同字节的位置成正比。当远程攻击者可以对你的验证路径计时,这是正确的比较形式。 关闭常数时间模式以查看差异(匹配值相同,但警告出现,作为提醒不要在生产中使用它)。

提供商前缀解析

实际的传入签名被包装在提供商特定的前缀中:GitHub 使用 sha256=<hex>,Slack 使用 v0=<hex>,Stripe 使用复合的 t=<ts>,v1=<hex>,v0=<hex>。 工具自动检测这些前缀,去除它们,并显示一个可见的注释,描述被去除的内容。切换 按字面值处理输入以禁用解析和规范化(对于测试解析器本身或具有非标准格式的提供程序很有用)。

复制为 curl header 或 Python 验证程序

每行的复制为 curl header操作生成一个可粘贴的 curl -H 'Header: <hex>' 行;复制为 Python 操作生成使用标准库 hmac 模块的代码片段,该片段始终以 hmac.compare_digest(标准库的常数时间比较)结尾。 Python 代码片段忠实地反映活动的密钥编码:hex 密钥使用 bytes.fromhex,base64 密钥使用 base64.b64decode,UTF-8 密钥使用 b'…' 字面量。

内置的 webhook 提供商预设

  • RFC 2202 / RFC 4231 参考向量("Jefe" / "what do ya want for nothing?" 的 HMAC-SHA-1 和 HMAC-SHA-256)。
  • Stripe v2 webhook(hex 编码的 whsec_ 密钥,复合的 t=<ts>.<body> 消息)。
  • GitHub webhook(UTF-8 密钥,JSON body,sha256= 前缀)。
  • Slack 请求签名(UTF-8 密钥,v0:<ts>:<body> 消息)。
  • JWT HS256 签名(base64 编码的密钥,header.payload 消息,base64url 签名)。

点击预设以加载消息、密钥、期望签名、curl 标头名称和前缀解析器 — 相应的行将显示匹配, 以便你在信任你自己的数据之前确认工具实现正确。

常见用途

  • 验证传入的 webhook 签名(Stripe、GitHub、Slack、自定义)。
  • 在脚本或终端中重新生成签名以与上游服务进行比较。
  • 在编写验证代码时为新的 webhook 集成生成期望签名。
  • 通过比较相同消息和密钥来学习 HMAC-SHA-256 和 HMAC-SHA3-256 之间的区别。
  • 根据已发布的测试向量审计第三方库的 HMAC 实现。

安全说明

所有计算都在浏览器中运行。任何消息、密钥或计算的 HMAC 都不会发送到任何服务器。清空全部 按钮一键清除消息、密钥和期望签名字段 — 但它不会在标签页隐藏、导航或任何其他自动触发时自动清除, 所以你的工作流程(粘贴密钥,切换到终端,粘贴 curl,切换回来,调整)可以继续工作。

评论

请接受“功能性”Cookie 类别以查看和发表评论。