开发者 / 签名
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标准的定义,空密钥会被视为长度为零字节的密钥。 完全在浏览器中本地运行,文件不会上传到服务器。
- 类别
- 开发者工具
- 使用次数
- 在浏览器中
- 费用
- 免费·无需注册
- 可用性
- 可直接使用
完全在浏览器中运行
——消息会按输入内容原样读取为UTF-8文本,包括空格和换行;末尾的换行符会改变结果。Stripe和GitHub等服务的Webhook就是通过这种方式使用HMAC-SHA256进行签名的。
验证webhook
在解析前获取原始请求正文,使用共享密钥计算HMAC,并通过恒定时间比较将其与签名标头进行比较,以免通过计时泄露匹配的字符数。拒绝时间戳早于几分钟的请求,以阻止重放攻击。
密钥
长度与哈希输出相同的密钥,例如用于SHA-256的32个随机字节,可以提供完整强度;更长的密钥会先被哈希压缩。不要将密钥存放在代码仓库中,如果密钥泄露,请及时轮换。
使用方法
- 粘贴消息内容,确保与发送时完全一致,例如webhook的原始请求体。
- 输入密钥,可使用文本或十六进制格式,然后选择哈希算法。
- 将十六进制或Base64结果与收到的签名进行比较。
隐私与限制
消息和密钥会留在浏览器中,不会发送到任何地方。
相关工具
常见问题
为什么我的签名与webhook的签名不匹配?
参与签名的消息必须与原始请求体逐字节一致:解析并重新序列化JSON,或缺少、增加换行符,都会改变消息内容。有些服务会将时间戳和请求体一起签名,例如Stripe的t=…,payload。
HMAC-SHA1现在还安全吗?
对于HMAC来说,它仍被认为是安全的;这不同于将SHA-1用于普通哈希。不过,新系统应使用HMAC-SHA256。
应该使用十六进制还是Base64?
它们只是表示同一组字节的两种方式,使用服务显示的格式即可。GitHub使用带有sha256=前缀的十六进制格式,许多其他服务使用Base64。
免费工具·使用在浏览器中次·无需账户