Toolonit
  1. 首页
  2. 加密
  3. HMAC 签名

HMAC 生成与校验

使用密钥生成和校验 HMAC-SHA256 等 HMAC 签名。

0 字节
密钥格式
算法
输出
HMAC-SHA-256输入密钥即可查看 HMAC。

可选。GitHub 的 X-Hub-Signature-256 请求头值(sha256=…)可以原样粘贴。

HMAC 是由消息和共享密钥生成的签名:持有密钥的任何人都能重新计算出它,而消息或密钥的任何改动都会得到不同的值。Webhook(GitHub、Stripe、Slack)、带签名的 API 请求和 JWT HS256 令牌都在使用它。HMAC 会随输入实时更新,你也可以粘贴一个签名进行校验。计算由浏览器内置的 Web Crypto 完成,消息和密钥不会离开你的设备;免费,无需注册。

如何生成和校验 HMAC

  1. 按签名时的原样粘贴消息——对于 Webhook,就是原始请求体。
  2. 输入密钥,或点“生成”得到一个随机密钥;如果拿到的密钥是 hex 字节,请选择“Hex”。
  3. 选择算法(除非另有说明,否则选 SHA-256),然后以 hex 或 Base64 复制结果。
  4. 要校验签名,把它粘贴到“校验签名”下——GitHub 的 sha256=… 请求头值可以原样粘贴。

功能

  • HMAC-SHA1、HMAC-SHA256、HMAC-SHA384 和 HMAC-SHA512
  • 密钥可为文本(UTF-8)或 hex,也可以点“生成”得到随机 32 字节密钥
  • 结果为 hex 或 Base64,随输入实时更新
  • 校验收到的 hex 或 Base64(包括 URL 安全格式)签名,带不带 GitHub 的 sha256= 或 Slack 的 v0= 前缀都可以
  • 签名长度与另一种算法相符时会提示你,并提供切换按钮
  • 由浏览器内置的 Web Crypto 计算

隐私安全吗?

是的。HMAC 由浏览器内置的 Web Crypto 计算;消息和密钥只留在本页,绝不会上传或保存。

常见问题

如何校验 GitHub Webhook 签名?

把原始请求体粘贴为消息,把 Webhook 密钥作为文本密钥输入,再把 X-Hub-Signature-256 请求头的值粘贴到“校验签名”下。GitHub 发送的是 sha256= 加上请求体的 hex HMAC-SHA256,前缀可以原样保留。

如何校验 JWT HS256 签名?

把令牌的头部和载荷——第二个点之前的全部内容——粘贴为消息,把密钥填入密钥框,选择 SHA-256,再把令牌的第三部分粘贴到“校验签名”下。它的 URL 安全 Base64 可以原样识别。

为什么签名对不上?

消息必须与签名时的内容逐字节一致:重新格式化的 JSON、末尾缺少或多出一个换行,或者 Windows(CRLF)换行符,都会改变 HMAC。在这里输入的文本使用 LF 换行。另外,还要检查算法,以及密钥是文本还是 hex。

结果和 OpenSSL 一样吗?

一样。printf '%s' 'message' | openssl dgst -sha256 -hmac 'key' 会输出相同的 hex 值,hex 密钥则与 -mac HMAC -macopt hexkey:… 的结果一致。请用 printf 或 echo -n:普通的 echo 会多加一个换行符,它也会被一起签名。

HMAC-SHA1 现在还能用吗?

就 HMAC 而言,实际上是安全的:已知的 SHA-1 碰撞并不能攻破 HMAC-SHA1,这也是旧的 Webhook 至今仍在使用它的原因。新项目请选择 HMAC-SHA256。

相关工具