加密/哈希

HMAC 计算器

使用密钥计算 HMAC 消息认证码,支持 SHA-1/SHA-256/SHA-384/SHA-512

输入文本
密钥
算法:
HMAC 结果
等待输入...

什么是 HMAC?

HMAC(Hash-based Message Authentication Code,基于哈希的消息认证码)是一种使用密钥和哈希函数计算消息认证码的算法。与普通哈希不同,HMAC 需要密钥参与计算,只有持有相同密钥的双方才能生成或验证相同的 HMAC 值,常用于 API 签名、JWT 签名和防篡改校验。

支持的算法

  • SHA-1:160 位输出,兼容旧系统
  • SHA-256:256 位输出,推荐使用
  • SHA-384:384 位输出
  • SHA-512:512 位输出,更高安全强度

使用场景

  • API 签名:验证请求来自合法客户端且未被篡改
  • JWT 签名:HS256/HS384/HS512 等算法基于 HMAC
  • Webhook 校验:验证回调数据的真实性
  • 数据完整性:在传输或存储时验证数据未被修改

安全提示

密钥应妥善保管,不要泄露或提交到代码仓库。生产环境建议使用环境变量或密钥管理服务存储密钥。

常见问题

HMAC 和普通哈希有什么区别?
普通哈希任何人都能算;HMAC 是带密钥的哈希——只有持有密钥的一方才能生成和验证。所以 API 请求签名、Webhook 验证(GitHub、Stripe)都用 HMAC:接收方用共享密钥重算一遍比对,就能确认请求确实来自持有密钥的一方且未被篡改。
为什么比较 HMAC 要用恒定时间比较?
普通的 === 比较在第一个不匹配的字符处提前返回,攻击者可以通过测量耗时逐字节猜出正确签名(时序攻击)。代码里请用 crypto.timingSafeEqual 或语言提供的恒定时间比较函数。
HMAC 能代替密码哈希来存密码吗?
不能。HMAC 计算太快,GPU 暴力破解成本很低。存密码要用专门的慢哈希(bcrypt、Argon2id、PBKDF2)。HMAC 的定位是"消息认证",不是"口令存储"。