HMAC签名计算使用说明

HMAC(Hash-based Message Authentication Code,基于哈希的消息认证码)是一种使用密钥和哈希函数来生成消息认证码的机制。它可以同时验证消息的完整性和真实性。本工具基于浏览器原生 Web Crypto API 实现,所有计算在本地完成,密钥不会上传到服务器。

HMAC 原理

HMAC 通过将密钥与消息结合,再经过哈希函数处理,生成固定长度的认证码。其计算公式为:HMAC(K, m) = H((K' XOR opad) || H((K' XOR ipad) || m)),其中 K 是密钥,m 是消息,H 是哈希函数。

各算法对比

  • HMAC-SHA1:输出 160 位(40 个十六进制字符),兼容性好但安全性较低
  • HMAC-SHA256:输出 256 位(64 个十六进制字符),目前最广泛使用,推荐首选
  • HMAC-SHA384:输出 384 位(96 个十六进制字符),安全性更高
  • HMAC-SHA512:输出 512 位(128 个十六进制字符),最高安全级别

常见应用场景

  • API 签名验证:如 AWS、阿里云、微信支付等 API 的请求签名
  • Webhook 验证:验证 GitHub、Stripe 等 Webhook 回调的真实性
  • JWT 签名:JSON Web Token 的 HS256/HS384/HS512 签名算法
  • 消息完整性:确保传输过程中消息未被篡改

常见问题

HMAC 和普通哈希有什么区别?

普通哈希(如 SHA-256)只需要消息输入,任何人都可以计算。HMAC 需要额外的密钥,只有持有密钥的人才能计算和验证,因此可以防止伪造。

密钥长度有要求吗?

理论上密钥可以是任意长度。如果密钥长于哈希块大小(SHA-256 为 64 字节),会先对密钥进行哈希;如果短于块大小,会用零填充。建议密钥长度至少等于哈希输出长度(如 SHA-256 建议 32 字节)。

计算结果安全吗?

所有计算完全在浏览器本地进行,使用 Web Crypto API,密钥和消息不会发送到任何服务器。但请注意不要在公共电脑上输入生产环境的真实密钥。