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,可用於 API 簽章、Webhook 驗證、訊息認證碼校驗與安全聯調。所有計算都在瀏覽器本地完成,金鑰不會上傳。

相關推薦

適用場景

  • 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 使用的加密库是同一套代码。所有计算在本地完成,金鑰和訊息不发送到任何伺服器。打开瀏覽器开发者工具的网络面板,可以驗證全程无任何外网請求。