跳到主要内容

HMAC 生成器 —— SHA-1 / SHA-256 / SHA-384 / SHA-512

HMAC-SHA1/256/384/512 —— 消息 + 密钥,输出 hex 与 base64,密钥可按 UTF-8/hex/base64 解读 —— 100% 浏览器本地

  • 本地处理
  • 分类 编码加密
  • 适合 快速检查小 payload、令牌、哈希和编码值。
0 字符 · 0 字节
密钥按
消息和密钥只留在你的浏览器 —— 不上传、不存储。
HMAC(hex)
HMAC(base64)

这个工具能做什么

免费在线 HMAC 生成工具。粘贴要签名的原始消息,填入密钥,选 HMAC-SHA1 / HMAC-SHA256 / HMAC-SHA384 / HMAC-SHA512,即可同时 得到小写 hex 和标准 base64 两种形式的签名 —— 这正是各家 webhook 和 API 文档里实际粘贴的两种写法。签名全程通过浏览器原生 WebCrypto 的 `crypto.subtle.sign` 完成,消息和密钥不离开页面、不发往服务器、 也不被记录。

多数在线 HMAC 工具最容易踩错的一点是密钥编码。一把密钥可能是 UTF-8 文本(`whsec_...`)、可能是裸 hex(32 字节密钥写成 64 个十六 进制字符)、也可能是 base64(Stripe 风格)。同一把密钥按错误方式 解读出的字节不同,算出来的签名看着合法、其实完全不对 —— 这就是 "密钥明明没错,webhook 校验却过不了"的经典原因。本工具让你显式 选择 UTF-8 / hex / base64,并实时显示解出的密钥字节长度,方便你 确认解读方式和发送方编码方式一致。

它可以用来复现支付平台在 `X-Signature` 头里发来的签名、生成你自己 HTTP 客户端要附带的签名头、手动校验 GitHub 或 Shopify 的 webhook, 也可以单独验证 JWT HS256 里的 HMAC 步骤。HMAC 是确定性的:算法、 消息、密钥、密钥编码四者相同,签名必然相同 —— 所以一旦对不上, 就说明四者之一不同,本工具帮你定位是哪一个。

工具细节

输入
文本 + 数值
页面会根据工具类型展示文本框、数值控件、文件选择或结构化输入。
输出
即时结果 + 复制
结果区优先给出可操作结果,支持项会显示复制、下载或可视化预览。
隐私
浏览器本地处理
主工具逻辑未发现外部 API 调用,输入通常留在当前标签页内处理。
保存 / 分享
本地保存偏好
偏好、历史或草稿保存在本机浏览器,不需要账号。
性能预算
首屏 JS ≤ 14 KB
没有声明 WASM 依赖,适合快速打开和移动端使用。
适用场景
编码加密 · 程序员
分类和职业标签用于推荐相关工具、组织内链,并帮助用户快速判断是否适合当前任务。

怎么用

  1. 1. 输入

    把内容粘贴或拖入工具面板。

  2. 2. 处理

    点击按钮,在浏览器内本地处理,文件不上传。

  3. 3. 复制 / 下载

    一键复制结果或下载到本地。

HMAC 生成器 适合怎么用

适合做浏览器本地的编码、解码、哈希、令牌检查和可分享转换。

适合编码任务

  • 快速检查小 payload、令牌、哈希和编码值。
  • 把值整理好再放进 API、URL、文档或客服工单。
  • 输入可能敏感时,尽量避开账号型在线工具。

编码检查项

  • 真实密钥不要随便粘贴,除非确认能接受本地浏览器处理。
  • 分享结果前确认这个操作是否可逆。
  • 哈希值要核对算法和大小写是否符合对方要求。

下一步可以接着做

这些入口会把当前任务接到更完整的工具链里。

  1. 1 MD5 / SHA 哈希 一次算出 MD5 / SHA-1 / SHA-256 / SHA-384 / SHA-512 五种摘要 —— 浏览器本地 打开
  2. 2 JWT 编码器 JWT 编码器 —— 选算法 (HS256/HS384/HS512),配 header / payload / secret,生成 token。 打开
  3. 3 文件哈希计算器 在浏览器本地为上传文件计算 SHA-1、SHA-256、SHA-384 或 SHA-512。 打开

真实使用场景

  • 手动校验 Stripe / 支付平台的 webhook 签名

    webhook 没触发你的处理逻辑,怀疑是签名校验。从日志里拿到原始 请求体,粘成消息,取 webhook 签名密钥(Stripe 的 `whsec_...` 是 UTF-8 文本),选 HMAC-SHA256,把 hex 输出和 `Stripe-Signature` 头里的 `t=...,v1=...` 比对。对得上,说明你 的校验代码有 bug(常见是重新 parse 了 JSON 改了字节);对不上, 说明密钥用错了或签错了 payload。无论哪种,你都用两次粘贴就把 问题圈定了,不用反复加打印再重新部署。

  • 生成客户端要发的 X-Signature 头

    你在对接一个要求每个请求都带 `X-Signature: <请求体的 HMAC>` 的接口。把请求体粘成消息,粘上平台给的 API key,选文档指定的 算法,把 hex(或 base64 —— 看文档)签名直接复制到 Postman 或 curl 的测试里。这样能在把签名写进代码前先确认服务端期望的确切 签名,把 HMAC 这一步单独调通,不和鉴权、路由搅在一起。

  • 校验 JWT HS256 token 的签名段

    一个 JWT 被判为"签名无效",你想确认到底是签名本身错了还是上游 出了问题。把 token 的 `header.payload`(前两段以点分隔、base64url 的内容)当消息,粘上 HS256 密钥,选 HMAC-SHA256,把 base64 输出 和 token 第三段比对(注意把 base64url 的 `-_` 换成 base64 的 `+/`)。对得上,签名没问题,问题在 claims 或过期;对不上,就是 密钥或签名输入不一致。

  • 复现 GitHub webhook 投递用于测试

    GitHub 用 HMAC 给 webhook payload 签名,发的是 `X-Hub-Signature-256: sha256=<hex>`。要在本地服务器上重放一次 投递,把确切的 JSON payload 粘成消息,把 webhook secret 当 UTF-8 密钥粘上,选 HMAC-SHA256,在 hex 输出前加 `sha256=` 还原 出这个头。这样你就能用一个服务端真的会接受的签名 curl 你的接口, 不必等 GitHub 真发一次事件。

  • 排查 hex/base64 或密钥编码不一致

    两个系统密钥一致,签名却对不上。粘上共享的消息和密钥,然后在 UTF-8、hex、base64 之间切换密钥编码,看字节长度读数:一把 32 字节随机密钥写成 64 个 hex 字符,按"hex"解出 32 字节、按"UTF-8" 却解出 64 字节,签名自然完全不同。再切换 hex 与 base64 两种 输出 —— 如果一边比 base64、一边比 hex,签名"对不上"只是因为它们 是同一段字节的不同编码。

常见踩坑

  • 签错了字节。HMAC 算的是按原样发送的原始消息 —— 签名前你要是重新序列化了 JSON、重排了 key、或加/去了末尾换行,算出的签名就和发送方不同。永远签逐字节的 payload,别签重建出来的对象。

  • 看错密钥编码。一把 32 字节密钥写成 64 个 hex 字符,和把这 64 字符当 UTF-8 文本,完全不是一回事 —— 解出的字节不同、签名也不同。让密钥模式(UTF-8 / hex / base64)和对方编码密钥的方式一致,并用字节长度读数确认。

  • 拿不同的输出编码去比。hex 和 base64 是同一段签名字节的两种编码;如果你代码里把期望值做 base64 解码、却粘了 hex 形式(或反过来),比对会无缘无故失败,根本不是密码学问题。挑接收方真正用来比对的那种编码。

隐私说明

整个运算 —— 解码你的密钥(UTF-8 / hex / base64)、导入成 WebCrypto 密钥、再用 HMAC-SHA1/256/384/512 给消息签名 —— 全部在你的浏览器 标签页里通过原生 `crypto.subtle` 完成。消息和密钥不上传、不记录, 也不进任何统计。和那些把状态写进 URL 以便分享的工具不同,本工具 刻意不把消息和密钥写进 URL,也不写进 localStorage,因为签名密钥 一旦泄露,它签过的每个签名都会被攻破。本地唯一保存的只有不敏感的 界面偏好(你上次选的算法和密钥编码),让页面记住你的设置,却绝不 记住你的密钥。

常见问题

类似工具组合

做你这行的人, 还会一起用这些。

Made by Toolora · 100% client-side · Updated 2026-05-29