HMAC

HMAC 生成器

在线生成 HMAC-SHA1 / SHA256 / SHA512

安全与认证
🔒 100% 本地运行 — 你的数据不会离开当前页面
由 ToolsKit 编辑团队维护最近更新:2026年3月5日最近复核:2026年3月5日
页面模式
输入

Quick CTA

先贴消息并填 secret,直接生成 HMAC;算法切换和对照案例放到 Deep。

Algorithms
🔒 100% client-side · Web Crypto API
输出
输入消息和密钥后生成 HMAC
页面阅读模式

Deep 展开踩坑、配方、片段、FAQ 与相关工具,适合排查问题或继续深入。

工具说明

在线生成 HMAC(基于哈希的消息认证码)。支持 HMAC-SHA1、HMAC-SHA256 和 HMAC-SHA512 算法。输入消息与密钥即可即时生成签名结果。基于浏览器 Web Crypto API 实现,所有计算均在本地完成,不会上传任何数据。

对比决策

Hash vs HMAC

Hash

适合非密钥场景的校验和内容指纹。

HMAC

适合需要共享密钥参与验证的签名场景。

补充:只要信任建立依赖密钥,普通 hash 就不够了。

共享密钥 HMAC vs 非对称签名

HMAC

适合双方都能安全保管同一密钥的服务间调用。

RSA/ECDSA

适合多方验证、密钥分发复杂或强不可抵赖要求的场景。

补充:HMAC 实现简单且高性能,非对称方案在多验证方场景更易扩展。

快速处理 vs 受控流程

快速处理

适合低影响探索和快速本地核对。

受控流程

适合生产交付、审计留痕或跨团队交接。

补充:Hmac Generator 工具在发布前设置明确验收标准时更稳定。

直接执行 vs 分阶段校验

直接执行

适合一次性实验和临时排障。

分阶段+复核

适合结果会被下游系统复用的场景。

补充:分阶段校验可减少静默兼容性回退。

失败输入样例库

JSON 重排导致签名不一致

失败输入:接收端对美化后的 JSON 重新计算 HMAC。

失败表现:合法请求被误判为签名错误。

修复:签名与校验都基于原始字节串。

输入假设未归一化

失败输入:边界载荷缺少必填字段。

失败表现:本地看似通过,但在下游消费阶段失败。

修复:导出前统一契约并强制执行预检。

兼容边界未显式声明

失败输入:一步执行绕过了复核检查点。

失败表现:同一源数据在不同环境得到不一致结果。

修复:明确兼容约束,并用独立消费端回归验证。

高频问题直答

Q01

HMAC 和普通 hash 的本质区别是什么?

HMAC 会把共享密钥一起算进去,所以它不只是做指纹,还能证明“持有密钥”的一方生成了结果。

Q02

为什么看起来一样的 payload,HMAC 却总对不上?

空格、换行、时间戳、字段顺序和编码差异,都会改变最终参与签名的字节流。

快速决策矩阵

外部回调需要稳定签名验证

建议选:采用原始字节规范化并严格约定算法。

谨慎用:避免在反序列化后再重组内容参与校验。

本地探索与临时诊断

建议选:使用快速处理并配轻量验证。

谨慎用:避免把探索结果直接升格为生产产物。

生产发布、合规留痕或跨团队交付

建议选:采用分阶段流程并保留验证记录。

谨慎用:避免无可回放证据的一步执行。

失败门诊(高频踩坑)

拿格式化后的文本去算签名

原因:美化过的 JSON 和发送方真正签的原始字节流通常不是同一份内容。

修复:必须使用原始字节,或使用协议明确定义的 canonical 形式。

忽略时间戳或前缀拼接规则

原因:很多 webhook 签的是 `timestamp.payload`,而不是单独的 payload。

修复:先完整复现签名模板,再去怀疑密钥是否错误。

对格式化后的 JSON 做签名

原因:只要空格或换行变化,字节流就变了,签名自然不可能一致。

修复:签名必须基于原始请求体字节,先签后解析。

场景配方

01

复现一次 Webhook 签名不匹配

目标:在修改 webhook 或网关代码前,先用原始请求复算出准确的 HMAC。

  1. 原样粘贴发送方实际签名的 body,包括换行。
  2. 使用相同的密钥、算法和时间戳规则。
  3. 把生成结果和收到的签名头逐项对比。

结果:你可以更快区分是 payload 漂移、密钥漂移,还是签名模板漂移。

02

在预发环境复现 Webhook 验签失败

目标:按“时间戳 + 原始请求体”重算 HMAC,定位线上验签失败根因。

  1. 从日志提取原始请求体字节和时间戳头。
  2. 使用与生产一致的密钥与算法重算签名。
  3. 将结果与回调方签名头逐字节对比。

结果:可快速判断是密钥不一致、原文被改写还是时间偏差导致失败。

03

Webhook 签名校验对齐流程

目标:让发送端和接收端 HMAC 行为保持一致。

  1. 统一消息规范化规则(含换行处理)。
  2. 确认算法、密钥编码和输出格式。
  3. 用真实样本测试篡改与重放场景。

结果:线上签名误判和拒绝率明显下降。

04

Hmac Generator 工具上线前预检:跨团队交接校验

目标:让结果进入共享流程前先通过关键假设校验。

  1. 先跑代表性样本并记录输出结构。
  2. 按下游验收规则回放边界样例。
  3. 样本与边界都通过后再发布。

结果:交付更稳定,回滚和返工显著下降。

05

Hmac Generator 工具故障回放:遗留契约稳定化

目标:把重复故障沉淀为可复用诊断流程。

  1. 在隔离环境重建问题输入集。
  2. 按明确通过标准比对预期与实际。
  3. 沉淀值班可复用 runbook。

结果:恢复时长缩短,执行差异降低。

生产可用片段

Webhook 签名基串

text

1700000000.{"event":"user.created","id":"evt_123"}

推荐工作流

实战要点

HMAC 生成器 在明确输入约束并按固定流程使用时,效果会更稳定。

实战用法

建议把这个工具放进可复用排障流程,而不是临时试错。

固定一组可复现输入和期望输出,团队协作会更高效。

工程建议

可将关键输出写入 PR 或问题单,减少反复沟通。

上线后若行为变化,用同一组样例对比新旧结果最容易定位。

实操指南

HMAC 生成器 更适合放在真实输入与发布决策链路中使用,优先关注「外部回调需要稳定签名验证」这类高风险场景。

适用场景

  • 当场景是 外部回调需要稳定签名验证 时,可优先采用:采用原始字节规范化并严格约定算法。。
  • 当场景是 本地探索与临时诊断 时,可优先采用:使用快速处理并配轻量验证。。
  • 在 Hash vs HMAC 场景下先对比 Hash 与 HMAC 再落实现。

快速步骤

  1. 原样粘贴发送方实际签名的 body,包括换行。
  2. 使用相同的密钥、算法和时间戳规则。
  3. 把生成结果和收到的签名头逐项对比。

避免踩坑

  • 常见失败:合法请求被误判为签名错误。
  • 常见失败:本地看似通过,但在下游消费阶段失败。

常见问题

HMAC 和普通哈希有什么区别?

HMAC 在哈希基础上加入共享密钥,可同时校验完整性与来源;普通哈希不具备密钥保护能力。

SHA-1、SHA-256 和 SHA-512 的区别是什么?

主要区别是位数与安全强度。新系统建议优先 HMAC-SHA256 或 HMAC-SHA512。

为什么我算出来的签名和服务端不一致?

通常是原文字节、换行、字符编码或密钥不一致。签名必须基于完全相同的原始输入。

HMAC 能替代加密吗?

不能。HMAC 用于验完整性和来源,不提供内容保密;保密应使用对称或非对称加密。

HMAC 结果可以直接用于生产吗?

可以用于联调与校验,但上线前应在真实环境验证签名串拼接规则、时区和密钥版本。

这个工具会上传消息或密钥吗?

不会。计算在浏览器本地完成,消息与密钥不会上传。