什么是 HMAC?
HMAC(基于哈希的消息身份验证码)是一种密码学机制,它将密钥与哈希函数相结合以生成身份验证码。它同时提供数据完整性和身份验证 — 确保消息未被篡改,并且是由知道密钥的人发送的。
常见用例
Webhook 验证
API 身份验证
JWT 签名
消息完整性
HMAC 如何工作
HMAC 接受两个输入 — 密钥 和 消息 — 并通过哈希函数(如 SHA-256)以特定方式运行它们,使得在不知道密钥的情况下伪造在计算上是不可行的。
HMAC(K, m) = H((K' ⊕ opad) || H((K' ⊕ ipad) || m))
其中:
H是哈希函数(例如 SHA-256)K是密钥m是要验证的消息opad和ipad是确保安全性的填充常数
如何使用此 HMAC 生成器
选择算法
从下拉菜单中选择您的 HMAC 算法。SHA-256 是默认选择,推荐用于大多数用例。MD5 和 SHA-1 可用于向后兼容,但标记为不安全。
输入您的密钥
在密钥输入字段中输入或粘贴您的密钥。如果您的密钥为二进制格式,使用输入类型选择器在 字符串、十六进制 或 Base64 编码之间切换。
输入您的消息
输入您要验证的消息。与密钥一样,如果您的消息是十六进制编码或 Base64 编码,您可以切换输入类型。
获取您的 HMAC
HMAC 在您输入时自动生成。十六进制 和 Base64 输出同时显示。点击任一输出旁的复制按钮将其复制到您的剪贴板。
验证 HMAC
要将您生成的 HMAC 与预期值进行比较,启用 验证 HMAC 复选框。粘贴预期的 HMAC — 该工具接受十六进制和 Base64 格式,并立即显示匹配或不匹配徽章。
功能
8 种 HMAC 算法
使用多种哈希算法生成 HMAC 代码,以满足任何集成需求:
SHA-256 推荐
Webhook、API 和 JWT(HS256)的标准选择。提供出色的安全性,具有 256 位输出。
SHA-512
更高的安全性,具有 512 位输出。适合需要最大密码学强度的应用程序。
SHA-384 & SHA-224
替代 SHA-2 变体,提供 384 位和 224 位输出,用于特定的安全需求。
SHA3-256 & SHA3-512
基于 Keccak 算法的最新一代 SHA-3 算法,提供现代密码学标准。
灵活的输入格式
密钥和消息都接受三种输入类型,这在处理来自 API 的二进制密钥或调试编码不匹配时至关重要:
字符串(UTF-8)
十六进制
Base64
双输出显示
同时查看 HMAC 的十六进制和 Base64 表示 — 无需切换。大写切换让您在小写和大写之间切换十六进制输出。
十六进制格式
- 更长的表示
- 更容易阅读和调试
- 每字节两个字符
- 大写/小写切换
Base64 格式
- 紧凑 33%
- HTTP 标头中常见
- 在 JWT 令牌中使用
- URL 安全变体可用
HMAC 验证
内置验证模式让您粘贴预期的 HMAC 值,并立即查看它是否与您生成的输出匹配。它支持十六进制和 Base64 格式,并规范化十六进制比较的空格和大小写。
即时验证
实时比较,显示匹配/不匹配徽章。
格式灵活性
自动接受十六进制和 Base64 输入格式。
智能规范化
处理十六进制值中的空格和大小写差异。
您的数据保持私密
所有 HMAC 计算完全在您的浏览器中进行,使用 CryptoJS 库:
- 无上传 — 您的密钥和消息永远不会离开您的设备
- 无服务器处理 — 一切都在浏览器中以 JavaScript 运行
- 无跟踪 — 我们不记录或存储任何输入数据
- 离线可用 — 加载后无需互联网连接即可工作
常见问题
我应该使用哪种 HMAC 算法?
SHA-256 是最广泛使用的,推荐用于大多数应用程序。它被 Stripe、GitHub、Shopify Webhook 和 AWS API 签名使用。如果您需要更高的安全性,请使用 SHA-512,或使用 SHA3 变体获得最新标准。
为什么 MD5 和 SHA-1 标记为不安全?
MD5 和 SHA-1 存在已知的密码学弱点 — 两者都已演示碰撞攻击。虽然 HMAC-MD5 和 HMAC-SHA1 在某些情况下仍被认为是安全的(HMAC 构造增加了安全性),但最佳实践是在新实现中使用 SHA-256 或更高版本。
十六进制和 Base64 输出有什么区别?
十六进制 将每个字节表示为两个十六进制字符(0-9、a-f)。它更长但更容易阅读和调试。Base64 更紧凑(大约短 33%),在 HTTP 标头和 JWT 中常见。选择您的 API 或服务期望的任何格式。
| 格式 | 长度 | 常见用途 | 可读性 |
|---|---|---|---|
| 十六进制 | 64 个字符(SHA-256) | 调试、日志 | 高 |
| Base64 | 44 个字符(SHA-256) | HTTP 标头、JWT | 中等 |
何时应该为密钥使用十六进制或 Base64 输入类型?
如果您的密钥以十六进制字符串(例如来自 API 仪表板显示原始字节)或 Base64 字符串的形式提供,请选择匹配的输入类型,以便该工具正确解释二进制数据。大多数情况下,"字符串"(UTF-8)是正确的选择。
- 字符串(UTF-8) — 用于常规文本密码和 API 密钥,如"my_secret_key_123"
- 十六进制 — 当您的密钥看起来像"a3f5b2c8d1e4..."(十六进制字节)时使用
- Base64 — 当您的密钥看起来像"SGVsbG8gV29ybGQ="(Base64 编码)时使用
我如何验证 Webhook 签名?
输入 Webhook 的签名密钥作为密钥,将原始请求体粘贴为消息,选择您的服务使用的算法(通常是 SHA-256),然后启用验证 HMAC 并粘贴来自 Webhook 标头的签名以检查它是否匹配。
获取密钥
从服务仪表板复制签名密钥
原始体
粘贴确切的请求体
验证
与标头签名进行比较
我的数据安全吗?
是的。所有 HMAC 计算完全在您的浏览器中运行 — 没有数据发送到任何服务器。您的密钥和消息始终保留在您的设备上。
还没有评论,快来发表第一条!