logo
GeekFormat

HMAC 生成与验证

哈希算法

建议密钥长度与哈希输出长度一致:SHA-1=20 字节,SHA-256=32 字节,SHA-384=48 字节,SHA-512=64 字节

消息内容0 字符
HMAC 签名 (Hex)
等待输入…

说明

  • HMAC 基于密钥和哈希算法生成签名,用于认证消息来源与完整性
  • 支持 SHA-1 / SHA-256 / SHA-384 / SHA-512
  • 生成与验证均在浏览器本地运行,不上传数据
  • 验证采用固定长度逐字节比较,降低时序差异

免费在线 HMAC 签名生成与验证工具,支持 HMAC-SHA256/384/512/SHA1/MD5。完美支持 Stripe/GitHub/Shopify Webhook 签名验证,Hex/Base64/Base64URL 多格式输出。

相关推荐

适用场景

  • Stripe Webhook 开发:调试 Stripe 支付回调,验证 `Stripe-Signature` 头是否正确
  • GitHub Webhook 集成:验证 GitHub Push、Pull Request 等事件的 `X-Hub-Signature-256` 签名
  • Shopify 订单同步:验证 Shopify 订单更新 Webhook 的 `X-Shopify-Hmac-Sha256` 签名
  • Slack Bot 签名:验证 Slack 事件回调的 `X-Slack-Signature` 签名
  • JWT 开发调试:使用 HS256 签名 JWT,验证 Token 有效性
  • API 请求签名:实现 AWS Signature V4 或自定义 API 签名方案

功能特点

  • 多种算法支持:HMAC-SHA256/384/512、SHA1、MD5,覆盖现代 API 和遗留系统
  • Webhook 签名验证:内置 Stripe/GitHub/Shopify/Slack 签名格式支持,自动解析常见格式
  • 三格式输出:Hex / Base64 / Base64URL,适配不同 API 和平台要求
  • 实时生成:输入变化自动计算,300ms 防抖,无需点击按钮
  • 签名验证模式:输入待验证签名自动比对,实时显示匹配结果
  • 密钥长度检测:实时检测密钥强度,过短时显示警告
  • 浏览器端处理:Web Crypto API 本地计算,密钥和消息不上传服务器
  • JWT 支持:HMAC-SHA256 输出可直接用于 HS256 签名

使用方法

  1. 选择算法:默认 HMAC-SHA256,现代 API 推荐使用
  2. 输入消息:粘贴原始消息体或 API 请求内容
  3. 输入密钥:输入 Webhook Secret 或 API Secret
  4. 选择格式:选择输出格式(Stripe 用 hex,JWT 用 Base64URL)
  5. 验证签名:切换到验证模式,粘贴待验证签名进行比对

常见问题

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

普通哈希(如 SHA256)只对消息本身做摘要,任何人都能计算。HMAC 在哈希过程中引入密钥,只有知道密钥的人才能生成或验证正确的签名。HMAC 同时保证消息完整性和来源认证,而普通哈希只能验证完整性。

如何验证 Stripe/GitHub/Shopify 的 Webhook 签名?

不同平台的签名格式略有不同:Stripe 使用 `Stripe-Signature` 头,格式为 `t=timestamp,v1=hex_signature`,需签名字符串为 `timestamp.payload`;GitHub 使用 `X-Hub-Signature-256`,格式为 `sha256=hex_signature`;Shopify 使用 `X-Shopify-Hmac-Sha256`,值为 Base64 编码。本工具支持直接粘贴这些签名进行验证。

输出格式 Hex、Base64、Base64URL 有什么区别?

Hex 是十六进制格式(如 0-9、A-F),人类可读,适合调试。Base64 是 64 字符编码,体积更小,适合嵌入 JSON。Base64URL 是 URL 安全版本(将 +/ 替换为 -_),用于 JWT 头部和 URL 参数传输。

应该选哪种 HMAC 算法?

推荐使用 **HMAC-SHA256**:这是现代 API 和 Webhook 的标准(Stripe、GitHub、Shopify、Slack 都用 SHA256),32 字节输出,通用性最好。SHA-512 安全性更高但输出更长(64 字节)。SHA1 仅用于兼容遗留系统。MD5 已废弃,仅用于极老的 API。

密钥长度有什么要求?

密钥越长越安全。建议至少 16 个字符(128 位),生产环境建议 32 个以上字符。工具会检测密钥长度,如果太短会显示警告。使用 cryptographically secure 的随机数生成密钥,不要使用简单密码或可预测的字符串。

为什么签名验证显示不匹配?

常见原因:1) 消息包含额外空格或换行符;2) 平台签名字符串格式不同(如 Stripe 签名的是 `timestamp.payload`);3) 签名包含前缀需要去掉(如 GitHub 的 `sha256=`);4) 使用的算法不同。检查加密端和解密端的参数是否完全一致。

HMAC 可以用于 JWT 签名吗?

可以。JWT 的 HS256 算法就是 HMAC-SHA256,HS512 是 HMAC-SHA512。本工具生成的 HMAC-SHA256 签名可以直接用作 HS256 算法的签名内容。JWT 的 Header 和 Payload 是 Base64URL 编码,然后用 HS256 对整个内容签名。

在线 HMAC 工具安全吗?

本工具使用 Web Crypto API 在浏览器本地完成所有计算,密钥和消息全程不发送到任何服务器。可以在浏览器开发者工具的网络面板验证,确认没有任何数据外传。适合测试和开发调试,极度敏感的生产密钥建议使用本地离线工具。

HMAC 签名可以被伪造吗?

不能。HMAC 的安全性依赖于密钥保密和哈希算法的抗碰撞性。在密钥足够长且随机的情况下,目前没有已知的攻击方法可以伪造有效的 HMAC 签名。定期更换密钥是良好的安全习惯。

什么是HMAC 生成与验证?

HMAC(Hash-based Message Authentication Code,基于哈希的消息认证码)是一种广泛使用的消息认证技术,由 RFC 2104 定义。HMAC 将密钥与消息一起通过哈希函数处理,生成一个固定长度的签名。相比普通哈希,HMAC 需要知道密钥才能生成或验证签名,因此同时保证了消息的完整性和来源真实性。

**HMAC 是现代 API 安全的基石**。Stripe、GitHub、Shopify、Slack、Twilio 等平台使用 HMAC-SHA256 签名 Webhook 事件,确保请求确实来自平台而非伪造。AWS 使用 HMAC-SHA256 实现 Signature V4 请求签名。JWT 的 HS256 算法本质就是 HMAC-SHA256。理解 HMAC 是掌握 API 安全的第一步。

**不同平台的签名格式各有不同**:Stripe 签名格式为 `t=timestamp,v1=hex_signature`,需要签名的内容是 `timestamp.payload`;GitHub 使用 `X-Hub-Signature-256` 头,格式为 `sha256=hex_signature`;Shopify 使用 `X-Shopify-Hmac-Sha256`,值为 Base64 编码。本工具支持这些常见格式的自动解析和验证。

**为什么签名验证会失败?** 最常见的原因是消息格式不匹配:平台可能签名的不是原始消息体,而是 `timestamp.payload` 这样的组合字符串;或者消息包含额外换行;或者签名包含前缀(如 `sha256=`)但你没有去掉。仔细对照平台文档,使用十六进制原始值进行比对。

工具使用浏览器原生 **Web Crypto API**(SubtleCrypto)实现 HMAC 计算,与 HTTPS 和 TLS 使用的加密库是同一套代码。所有计算在本地完成,密钥和消息不发送到任何服务器。打开浏览器开发者工具的网络面板,可以验证全程无任何外网请求。