123问免费工具与知识服务
123问工具大全› 工具大全› 加密编码› HMAC计算

🔏 HMAC计算

Web Crypto API · 多种算法 · Hex/Base64输出

HMAC计算常见问题

HMAC是什么?

HMAC(基于哈希的消息认证码)是一种通过加密哈希函数和密钥来验证消息完整性和真实性的机制。广泛应用于API签名、JWT、OAuth等场景。

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

普通哈希(如SHA256)不需要密钥,任何人都能计算,只保证内容没被改动。HMAC需要密钥,只有持有密钥的人才能生成有效值,因此除了完整性还能验证来源真实性(认证)。

如何选择HMAC算法?

HMAC-SHA256是最常用选择,安全性好性能佳。HMAC-SHA512更安全但更慢。HMAC-MD5和HMAC-SHA1逐渐被淘汰,不建议用于新的安全场景。

HMAC到底是怎么算出来的?

先把密钥处理成固定长度(大于哈希块长就先哈希),然后做两次哈希:内层用密钥与ipad异或将消息打包,外层用密钥与opad异或将内层结果再包一层。这个"内哈希+外哈希"结构就是HMAC。

HMAC和AES加密有什么区别?

AES是可逆加密,能还原原文;HMAC是单向的摘要,不可还原,只用来"验签"。HMAC不隐藏内容——别人看得见明文,但改不了、伪造不了。

为什么HMAC-SHA256比SHA256更适合做API签名?

直接用SHA256(message)任何人都能算出,无法证明是谁签的。HMAC-SHA256(message, secret)因为掺入了只有你和服务器知道的密钥,别人无法伪造,所以适合做API签名和鉴权。

密钥长度怎么定最好?

密钥长度建议不小于哈希摘要长度(如SHA256对应至少32字节)。密钥太短容易被字典攻击,太长也不会增加太多安全性(会先哈希)。用随机生成的密钥最佳。

HMAC能用来做密码存储吗?

不推荐。HMAC速度快,适合验签,但做密码哈希易被暴力破解。密码存储请用专门的慢哈希如bcrypt、scrypt、argon2。

HMAC计算 - 示例演示

示例一:最常用的API签名

输入:消息"GET /api/user?id=1&ts=1700000000",密钥"my-secret-key",HMAC-SHA256
结果:得到一个64位十六进制签名,服务器用同一密钥重算比对,一致则通过
这是Webhook、开放API验证请求来源的标准做法。

示例二:JWT中的应用

输入:消息"eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiIxMjMifQ",密钥"jwt-secret",HMAC-SHA256
结果:JWT的第三段签名就是HMAC-SHA256结果,用于校验token是否被篡改
JWT Header和Payload是Base64,是否伪造就靠这段HMAC签名把关。

示例三:同一消息不同算法对比

输入:消息"Hello HMAC",密钥"key",分别用HMAC-MD5、HMAC-SHA1、HMAC-SHA256、HMAC-SHA512
结果:四种算法输出长度不同:MD5为32字符、SHA1为40、SHA256为64、SHA512为128
输出长度由底层哈希决定,请按安全需求选择合适的算法。

HMAC计算深度解读

HMAC的内部到底做了什么?

HMAC的核心是"两次哈希"结构,形式上记作 HMAC(key,msg) = H( (key⊕opad) ∥ H( (key⊕ipad) ∥ msg ) )。

简单说:把密钥异或上固定的ipad/opad填充值,分别包住消息做一次内层哈希,再把结果用外层填充包住做第二次哈希。两个固定的填充值让输入无法被线性预测,从而抵御长度扩展攻击。

HMAC调用常见算法与输出长度
算法底层哈希HMAC输出(Hex)推荐度
HMAC-MD5MD5(128位)32字符低,淘汰
HMAC-SHA1SHA-1(160位)40字符低,淘汰
HMAC-SHA256SHA-256(256位)64字符高,推荐
HMAC-SHA512SHA-512(512位)128字符高,更安全

HMAC与"加盐哈希"有什么不同?

很多人把HMAC和"把盐拼进哈希"(如 SHA256(salt+msg))混为一谈,其实完全不同。

  • 加盐哈希只是把盐拼到消息里再哈希,没有标准结构,容易受长度扩展攻击。
  • HMAC有规范的ipad/opad打包结构,是标准化的消息认证码。
  • 加盐哈希常用于密码存储,HMAC常用于消息验签,用途也不同。
  • HMAC严格来说不是"加密",而是"认证",不提供保密。

HMAC在真实系统里怎么用

HMAC的典型应用场景
场景消息密钥归属作用
API签名请求参数+时间戳客户端/服务器共享防篡改防重放
JWTHeader+Payload签发方/校验方共享token防伪造
Webhook回调内容提供方/接收方共享确认来源可信
云存储签名请求头/URL服务端与SDK临时授权

在这些场景里,双方都持有同一个密钥,用HMAC对消息算签名,收到后再独立重算比对。只要密钥不泄露,伪造几乎不可能。

使用HMAC的注意事项

  • 密钥要随机生成,别用明文单词或简单字符串。
  • 服务端存密钥要注意安全,通常放在环境变量或专用密钥管理服务。
  • API签名要加时间戳并设置有效期,防止重放攻击。
  • 不同算法别混用,签名和校验必须用同一种HMAC算法。
  • HMAC只做认证,敏感数据如需保密请再叠加AES加密。

HMAC计算参考数据

HMAC vs 普通哈希 vs 加密 对比

维度普通哈希HMAC对称加密
是否需要密钥不需要需要需要
能否逆推原文不能不能能
能否验证来源不能能取决场景
典型算法MD5/SHAHMAC-SHA256AES
典型用途校验完整性验签/认证数据保密

HMAC-SHA256 常见参考值

消息密钥HMAC-SHA256(Hex)
(与密钥相关,此处为示例格式)
abckey74f2e52e6b...(请以工具实时计算为准)
Hellosecret...(请以工具实时计算为准)

使用说明

使用方法

1. 输入消息文本。

2. 输入密钥。

3. 选择HMAC算法。

4. 查看Hex和Base64输出结果。

分享工具: Facebook Twitter 微博 复制链接