HMAC Generator
One input per line. Output is numbered to match the input order.
Pinned tools are listed in your favourites on the home page.Copies a link to this tool that carries your current input, so it opens ready to run.Gives you an iframe snippet for putting this tool on your own site.
Ctrl+Enter Run · Ctrl+Shift+C Copy · Esc Clear
Understand HMAC Generator
使用共享密钥对一条消息计算 HMAC-SHA256、HMAC-SHA384 或 HMAC-SHA512 认证码。
How it works
HMAC 会把哈希跑两遍,每一遍都把密钥混入其中,因此要产生一个有效的认证码,就必须持有密钥。这正是它与普通哈希的区别:任何人都能对被改动的数据重新算出 SHA-256 摘要,这让裸摘要在面对蓄意改动时毫无用处,而 HMAC 把完整性绑定在对密钥的持有之上。输出宽度等于底层哈希——SHA-256 为 32 字节,这里显示为 64 个十六进制字符。本工具把密钥当作 UTF-8 文本处理,并使用 WebCrypto 签名。
When to use it
- 通过对原始请求体重新计算签名,验证 GitHub 或 Stripe 的 webhook。
- 当服务器拒绝你的签名时,调试 AWS Signature V4 或类似的请求签名方案。
- 确认另一种语言中的签名实现产生的输出与此处逐字节一致。
- 手工构造 HS256 JWT 的签名部分,看清各个环节是如何拼合的。
- 由记录 id 加上服务端密钥派生出确定且不可伪造的令牌。
Watch out for
- 在真实代码中要用常数时间比较认证码。使用 === 或普通字符串比较会在第一个不同的字节处提前退出,多次尝试之后会泄漏正确的前缀;请使用 crypto.timingSafeEqual、hmac.compare_digest 或你所用语言的等价函数。
- 要对确切的原始字节签名。解析 JSON 再重新序列化会改变空白和键的顺序,HMAC 就对不上了。请在任何请求体解析中间件接触之前先取得请求体。
- 编码方式必须对齐。本工具接受 UTF-8 文本密钥并返回十六进制。若某个服务方公布的是 base64 密钥,或期望 base64 签名,就需要一次显式转换——编码不匹配是签名「本该」对上却对不上的最常见原因。
- HMAC 证明的是来源和完整性,不是新鲜度。除非把时间戳或随机数放进被签名的数据并加以校验,否则被截获的请求可以原样重放,而且会验证通过。
Not the right tool for: 那种希望第三方能够验证、却不能自行生成的签名。HMAC 是对称的——验证密钥就是签名密钥——因此当验证方不得具备伪造能力时,请使用 RS256 或 Ed25519 这类非对称算法。
Frequently Asked Questions
什么是消息认证码?
消息认证码(MAC)是附加在消息上的一小段值,用于验证消息的完整性(未被改动)和真实性(来自持有密钥的预期发送方)。HMAC 是使用最广泛的 MAC 构造——它把哈希函数与一个密钥结合起来。
API 认证是什么?
API 认证是在授予访问权限之前向服务器证明客户端身份。HMAC 被用于 API 签名方案:客户端用共享密钥对请求(方法 + 路径 + 请求体 + 时间戳)计算 HMAC,并把结果作为请求头发送。服务器重新计算并进行比对。
HMAC SHA256 是什么?
HMAC-SHA256 在 HMAC 构造内部使用 SHA-256 作为哈希函数。它产生 256 位(32 字节)的认证码。它是 webhook 签名(GitHub、Stripe)和 AWS Signature V4 最常见的选择。HMAC-SHA512 产生 512 位的认证码,安全强度更高。
How to Use HMAC Generator
- Paste or type your input in the input area above.
- The tool processes your input automatically or click Run.
- Copy or download the result using the action buttons.
- Use Ctrl+Enter to run quickly from the keyboard.