DeepSeal — 本地加密笔记应用,你的隐私只有你说了算。 免费下载 → ×
HMAC

HMAC 生成器

基于哈希的消息认证码(HMAC)生成,支持 MD5/SHA-1/SHA-256/SHA-512 算法。

P0
算法选择实时计算
HMAC-SHA256 结果256 位 · 64 字符
0b2f5ac640b95bf6f3457d96ecb78d817ca46d72e33094a21e00d5b17e9daa79

HMAC 在线生成器

HMAC(Hash-based Message Authentication Code,基于哈希的消息认证码)使用密钥对消息进行哈希运算,输出固定长度的认证码。 它可以同时验证消息完整性(未被篡改)和消息真实性(来自持密钥者)。 本工具支持 HMAC-MD5、HMAC-SHA1、HMAC-SHA256、HMAC-SHA512、HMAC-SHA3 五种算法。

典型应用场景

  • API 签名:阿里云、腾讯云、AWS 等云服务 API 调用使用 HMAC-SHA256 防篡改
  • Webhook 校验:GitHub、Stripe、微信支付通过 HMAC 签名验证请求来源
  • JWT 签名:HS256 算法本质就是 HMAC-SHA256
  • Cookie 防伪:服务端用 HMAC 给 Cookie 签名防止伪造
  • TOTP 两步验证:基于 HMAC-SHA1 计算动态口令

API 签名实现要点

以 AWS Signature Version 4 为例,API 签名的典型流程是:将请求方法、URI、查询参数、头部、正文哈希按规范拼接成"规范请求";再拼接"待签字符串"(含时间戳、credential scope);最后用派生密钥(从长期密钥经多轮 HMAC 派生)对待签字符串计算 HMAC-SHA256,得到签名。服务端收到请求后用相同流程重算并比对,一致则放行。

实现时需注意几个安全要点:密钥必须保密,不可出现在 URL 或日志中;必须包含时间戳并校验时间窗口(通常 5-15 分钟),防止重放攻击;服务端比较签名必须用恒定时间比较(constant-time comparison),否则攻击者可通过响应时间差逐字节猜测签名(时序攻击);新建系统推荐 HMAC-SHA256,HMAC-MD5 和 HMAC-SHA1 虽未发现实际攻击但已不推荐用于新项目。

Webhook 校验是另一常见场景。GitHub 会在每个 Webhook 请求的 X-Hub-Signature-256 头部附带 sha256= + HMAC-SHA256(用你在 GitHub 配置的 secret 作为密钥,请求 body 作为消息)。你的服务端用相同 secret 重算 HMAC 并与头部比对,即可验证请求确实来自 GitHub 而非伪造。

HMAC 常见问答

HMAC 是什么?
HMAC(Hash-based Message Authentication Code)是基于哈希的消息认证码,用密钥对消息计算哈希,同时验证数据完整性和真实性。只有持有密钥的双方才能生成和验证有效的 HMAC。
HMAC-SHA256 怎么用于 API 签名?
典型流程:将请求参数按字典序排列拼接,用密钥对拼接串计算 HMAC-SHA256,将结果作为签名参数随请求发送。服务端用相同密钥重新计算并比对,一致则通过。阿里云、腾讯云、AWS 等均采用此模式。
HMAC 和普通哈希有什么区别?
普通哈希无密钥,任何人都能计算,只能验证完整性。HMAC 需要密钥,能同时验证完整性和真实性——既能确认数据没被篡改,也能确认发送方身份。
HMAC 密钥应该多长?
HMAC 密钥长度建议等于哈希输出长度(如 HMAC-SHA256 用 32 字节)。密钥应使用密码学安全的随机数生成,不可用短密码或可预测值。

HyperGrad 生态还有这些站