消息认证码生成器

输入消息和密钥,即可在浏览器中计算消息经四种哈希函数得出的 HMAC,同时给出十六进制和 Base64 两种形式。

免费 在浏览器中运行 核对于2026年11月10日星期二

需要进行认证的数据。文本按 UTF-8 原样读取;十六进制或 Base64 则按字节读取。

消息编码

消息的书写方式。

秘密密钥。只有持有相同密钥的人才能生成相同的 HMAC,因此请妥善保密。

密钥编码

密钥的书写方式。Base64 还可读取 JWK 中 “k” 值所用的 URL 安全字母表。

结果

HMAC 值

此工具在您的浏览器中运行。您输入的内容不会发送给我们。

使用方法

  1. 在 “消息” 中输入数据。若是二进制数据,请在 “消息编码” 下选择 “十六进制” 或 “Base64”。
  2. 在 “密钥” 中输入秘密,并在 “密钥编码” 下选择它的书写方式。
  3. 阅读 “HMAC 值” 中的四行结果。复制需要的值,或将它与您的系统给出的值比较。
  4. 如果数值与另一个系统不同,请先检查字节:换行符或编码不同,HMAC 就会不同。

什么是 HMAC

HMAC(RFC 2104)是一种消息认证码,即只有知道秘密密钥的人才能生成的一段短数值。它由普通的哈希函数 H 构建,对消息和密钥各应用两次,因此同一个哈希函数可用于表格中的四行。由于需要密钥,HMAC 相符就说明消息没有被改动,并且来自持有密钥的人。

HMAC 并不隐藏消息。任何拿到消息的人都可以读取它,HMAC 只让他们能够核对消息是否完整。

HMAC(K, m) = H((K XOR opad) || H((K XOR ipad) || m))

ipad = 重复 B 次的字节 0x36
opad = 重复 B 次的字节 0x5C
B    = H 的分组长度:SHA-1 和 SHA-256 为 64 字节,SHA-384 和 SHA-512 为 128 字节

选择哪种哈希与密钥

HMAC-SHA-256 是常用的选择,许多 Webhook 和 API 都使用它。HMAC-SHA-512 的结构相同,但输出更长。HMAC-SHA-1 仍出现在旧系统中,不适合用于新的设计。

密钥应当是随机的,并且至少与哈希输出一样长。以单词或短语形式输入的密钥很容易被猜到,一旦被猜到,HMAC 就毫无作用。

十六进制与 Base64

两种形式显示的是相同的字节。十六进制把每个字节写成两位数字,因此 SHA-256 有64位。Base64 把三个字节写成四个字符,因此 SHA-256 有44个字符,其中最后一个是用于填充的 =(RFC 4648)。

  • HMAC-SHA-1:40位十六进制数字,28个 Base64 字符
  • HMAC-SHA-256:64位十六进制数字,44个 Base64 字符
  • HMAC-SHA-384:96位十六进制数字,64个 Base64 字符
  • HMAC-SHA-512:128位十六进制数字,88个 Base64 字符

示例:RFC 4231 测试用例2

密钥 Jefe 与消息 what do ya want for nothing? 是 RFC 4231 中针对 SHA-256、SHA-384 和 SHA-512 的第二个测试用例,也是 RFC 2202 中针对 SHA-1 的第二个测试用例。下表是页面为它们给出的结果,其中 HMAC-SHA-256 的值与 RFC 所列的一致:5bdcc146bf60754e6a042426089575c75a003f089d2739839dec58b964ec3843。

算法 十六进制 Base64
HMAC-SHA-1 effcdf6ae5eb2fa2d27416d5f184df9c259a7c79 7/zfauXrL6LSdBbV8YTfnCWafHk=
HMAC-SHA-256 5bdcc146bf60754e6a042426089575c75a003f089d2739839dec58b964ec3843 W9zBRr9gdU5qBCQmCJV1x1oAPwidJzmDnexYuWTsOEM=
HMAC-SHA-384 af45d2e376484031617f78d2b58a6b1b9c7ef464f5a01b47e42ec3736322445e8e2240ca5e69e2c78b3239ecfab21649 r0XS43ZIQDFhf3jStYprG5x+9GT1oBtH5C7Dc2MiRF6OIkDKXmnix4syOez6shZJ
HMAC-SHA-512 164b7a7bfcf819e2e395fbe73b56e0a387bd64222e831fd610270cd7ea2505549758bf75c05a994a6d034f65f8f0e6fdcaeab1a34d4a6b4b636e070a38bce737 Fkt6e/z4GeLjlfvnO1bgo4e9ZCIugx/WECcM1+olBVSXWL91wFqZSm0DT2X48Ob9yuqxo01Ka0tjbgcKOLznNw==

常见问题

HMAC 和加密是一回事吗?

不是。HMAC 不隐藏消息,任何人都可以读取它。它只能说明消息没有被改动,并且发送方知道密钥。若要保密,则需要加密。

哈希值和 HMAC 有什么区别?

哈希值只取决于消息,任何人都能计算。HMAC 还需要秘密密钥,因此只有掌握密钥的人才能生成或检查它。如需普通摘要,请使用 哈希值生成器。

为什么我的 HMAC 与库给出的不同?

密钥或消息的字节不同。以文本形式输入的密钥取其 UTF-8 字节,而用十六进制写出的同样字母则是另外的字节。消息末尾的换行符同样会改变 HMAC。

应该使用多长的密钥?

使用至少与哈希输出一样长的随机密钥:HMAC-SHA-256 应使用32字节。RFC 2104 强烈不建议使用更短的密钥,而由单词或短语组成的密钥很容易被猜到。

可以用这个页面检查 Webhook 签名吗?

可以,但必须使用被签名的确切字节。Webhook 签名通常是对原始请求正文计算的,因此请原样粘贴正文:重新格式化过的 JSON 正文会得到不同的 HMAC。

我的密钥或消息会被发送到什么地方吗?

不会。HMAC 使用浏览器自带的 SubtleCrypto 在您的浏览器中计算。密钥和消息既不会被上传,也不会被保存。

资料来源

数据和文字最近核对于2026年11月10日星期二。

我们使用必要的 Cookie 来运行网站。经您同意后,Google 还会使用广告 Cookie 展示个性化广告。如果您拒绝,仍会看到广告,但广告不会个性化。