DevToolPal
简

HMAC 生成器

用密钥计算消息的 HMAC-MD5、HMAC-SHA1、HMAC-SHA256、HMAC-SHA384 和 HMAC-SHA512,输出十六进制或 Base64。

本地处理,不上传

选项

密钥格式
输出格式

消息

0 字符 · 0 B

HMAC

结果会显示在这里

功能说明

HMAC(基于哈希的消息认证码,RFC 2104)把密钥和哈希函数结合起来给消息签名。知道同一密钥的接收方重新计算 HMAC,与随消息发来的值比较。只要消息被改动过,或者发送方不知道密钥,两个值就对不上。

HMAC 用途很广:Webhook 签名(GitHub、Stripe、Slack)、API 请求签名、HS256 算法的 JWT、Cookie 签名和一次性密码。本工具同时计算 HMAC-MD5、HMAC-SHA1、HMAC-SHA256、HMAC-SHA384 和 HMAC-SHA512,方便和你的系统所用的算法对照。

使用方法

  1. 输入密钥。如果密钥是十六进制或 Base64 字节而不是普通文本,选择对应的密钥格式。
  2. 粘贴消息,或点击示例。
  3. 所有 HMAC 随输入实时更新。选择十六进制或 Base64 输出,复制需要的值。

消息按 UTF-8 编码,与输入完全一致,包括空格和换行。

示例

密钥为 key、消息为 The quick brown fox jumps over the lazy dog 时,HMAC-SHA256 是 f7bc83f430538424b13298e6aa6fb143ef4d59a14946175997479dbc2d1a3cd8。可以在命令行里核对:

echo -n "The quick brown fox jumps over the lazy dog" | openssl dgst -sha256 -hmac "key"

注意 -n:没有它,echo 会追加换行,HMAC 就不同了。

校验 Webhook

校验 Webhook 时,取 JSON 解析之前的原始请求体,按服务商文档拼出待签名字符串(常见的是 timestamp.body),用签名密钥计算 HMAC,再与签名请求头比较。在自己的代码里,请用常量时间比较函数比较签名,防止计时攻击。

常见问题

› 哈希和 HMAC 有什么区别?

SHA-256 这样的普通哈希任何人都能算出来。HMAC 在哈希里混入了密钥,只有知道密钥的人才能生成或校验这个值,所以它是消息认证码,而不只是校验和。

› 应该用哪种 HMAC 算法?

一般用 HMAC-SHA256,大多数 API 和 Webhook 都要求它。HMAC-SHA512 也可以。HMAC-MD5 和 HMAC-SHA1 作为 MAC 目前仍算安全,但只在老系统要求时使用。

› 为什么我算出的 HMAC 和服务器的不一样?

检查消息的确切字节(末尾换行、JSON 空格不同都会导致完全不同的结果)、密钥格式(文本还是十六进制/Base64)以及输出编码。Webhook 服务商通常对「时间戳 + 原始请求体」拼成的字符串签名。

› 我的密钥会被保存或发送出去吗?

不会。HMAC 在浏览器里计算,密钥只保存在当前页面的内存中,不会存储、不会写进地址栏,也不会包含在分享链接里。