开发者 / 签名

HMAC生成器(SHA-256、SHA-512)

使用SHA-256、SHA-384、SHA-512或SHA-1,为消息和密钥生成HMAC签名,支持十六进制和Base64格式,用于测试webhook和API签名。

HMAC生成器(SHA-256、SHA-512): HMAC通过哈希函数将密钥与消息结合,因此只有拥有该密钥的人才能生成相同的签名。计算过程使用浏览器的Web Crypto API,也就是浏览器用于HTTPS的相同实现。允许使用空密钥;按照HMAC标准的定义,空密钥会被视为长度为零字节的密钥。 完全在浏览器中本地运行,文件不会上传到服务器。

使用次数
在浏览器中
费用
免费·无需注册
可用性
可直接使用
HMAC生成器本地处理

完全在浏览器中运行

十六进制—
Base64—

消息会按输入内容原样读取为UTF-8文本,包括空格和换行;末尾的换行符会改变结果。Stripe和GitHub等服务的Webhook就是通过这种方式使用HMAC-SHA256进行签名的。

验证webhook

在解析前获取原始请求正文,使用共享密钥计算HMAC,并通过恒定时间比较将其与签名标头进行比较,以免通过计时泄露匹配的字符数。拒绝时间戳早于几分钟的请求,以阻止重放攻击。

如需计算不带密钥的哈希,请使用哈希生成器;如需处理签名令牌,请使用JWT解码器。

密钥

长度与哈希输出相同的密钥,例如用于SHA-256的32个随机字节,可以提供完整强度;更长的密钥会先被哈希压缩。不要将密钥存放在代码仓库中,如果密钥泄露,请及时轮换。

使用方法

  1. 粘贴消息内容,确保与发送时完全一致,例如webhook的原始请求体。
  2. 输入密钥,可使用文本或十六进制格式,然后选择哈希算法。
  3. 将十六进制或Base64结果与收到的签名进行比较。

隐私与限制

消息和密钥会留在浏览器中,不会发送到任何地方。

相关工具

常见问题

为什么我的签名与webhook的签名不匹配?

参与签名的消息必须与原始请求体逐字节一致:解析并重新序列化JSON,或缺少、增加换行符,都会改变消息内容。有些服务会将时间戳和请求体一起签名,例如Stripe的t=…,payload。

HMAC-SHA1现在还安全吗?

对于HMAC来说,它仍被认为是安全的;这不同于将SHA-1用于普通哈希。不过,新系统应使用HMAC-SHA256。

应该使用十六进制还是Base64?

它们只是表示同一组字节的两种方式,使用服务显示的格式即可。GitHub使用带有sha256=前缀的十六进制格式,许多其他服务使用Base64。

免费工具·使用在浏览器中次·无需账户