什么是 HMAC?

HMAC 是一种将密钥与哈希函数结合的消息认证技术,通过双重哈希结构验证数据完整性和来源真实性。它能抵抗长度扩展攻击,广泛应用于 API 请求签名、JWT 令牌验证和 Webhook 安全校验等场景,是现代网络安全的基础组件。

快速了解

全称基于哈希的消息认证码
创建时间1996 年(RFC 2104)
规范文档官方规范

工作原理

HMAC 于 1996 年发布,在 RFC 2104 中定义。它通过以特定方式使用密钥对消息进行两次哈希来工作,使其能够抵抗影响普通哈希函数的长度扩展攻击。HMAC 可以使用任何加密哈希函数,如 SHA-256 或 SHA-512。生成的代码是固定大小的值,如果消息或密钥被修改,它会完全改变。HMAC 广泛用于 API 认证、JWT 签名和安全通信协议。

主要特点

  • 将密钥与哈希函数结合
  • 同时提供完整性和真实性
  • 抵抗长度扩展攻击
  • 可以使用任何哈希函数(SHA-256、SHA-512)
  • 无论输入如何,输出大小固定
  • 需要双方共享密钥

常见用途

  1. API 请求签名
  2. JWT 签名验证
  3. Webhook 负载验证
  4. 安全 cookie 签名
  5. 协议中的消息认证

示例

loading...
Loading code...

常见问题

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

普通哈希只提供数据完整性(检测数据是否被修改),而 HMAC 同时提供完整性和真实性(验证数据来自拥有密钥的可信来源)。HMAC 使用与哈希函数混合的密钥,因此只有拥有密钥的各方才能生成或验证 HMAC 值。

为什么 HMAC 比简单地用密钥哈希消息更安全?

简单地在哈希前将密钥与消息连接(例如 hash(key + message))容易受到长度扩展攻击,攻击者可以在不知道密钥的情况下向消息追加数据。HMAC 的双重哈希构造配合内外填充专门防止了这种攻击,并提供经过验证的安全保障。

应该使用哪种哈希算法配合 HMAC?

HMAC-SHA256 是最广泛推荐的选择,在安全性和性能之间取得良好平衡。HMAC-SHA512 为高度敏感的应用提供额外的安全裕度。新实现应避免使用 HMAC-MD5 和 HMAC-SHA1,尽管在 HMAC 构造中使用时它们比底层哈希函数更安全。

HMAC 在 API 认证中是如何使用的?

在 API 认证中,客户端通过使用共享密钥对请求详情(方法、路径、时间戳、正文)进行哈希来创建 HMAC 签名。服务器使用其密钥副本重新创建相同的 HMAC,并与收到的签名进行比较。如果匹配,则请求已认证且未被篡改。

如果 HMAC 密钥泄露会怎样?

如果密钥泄露,攻击者可以为任何消息伪造有效的 HMAC 签名,完全绕过认证。您应该立即轮换(更改)泄露的密钥,并使所有使用旧密钥创建的令牌或签名失效。使用适当的密钥管理实践(如安全存储和定期轮换)来最小化此风险。

相关工具

相关术语

相关文章

哈希算法详解【2026】- 从MD5到SHA-256全解析

深入解析现代网络密码学中哈希算法(Hashing Algorithms)的底层数学核心原理、安全特征及其在实际工程中的广泛应用场景。全面硬核对比经典 MD5、SHA-1 的漏洞与淘汰原因,深入学习安全的 SHA-256/SHA-3 标准,以及专门针对用户密码安全存储设计的 Bcrypt、Argon2、Scrypt 慢速哈希算法的区别与最佳业务选型指南。

2024-01-25

MD5哈希详解【2026】- 原理、用途与安全性全解析

深入透彻了解经典 MD5(Message-Digest Algorithm 5) 密码哈希算法的底层散列数学原理、经典文件校验应用场景与其在现代网络安全环境中的严重致命局限性。深度硬核剖析如何进行大文件完整性校验防篡改、MD5 哈希碰撞(Collision)攻击与彩虹表破解原理,并为您强烈推荐 Bcrypt、Argon2、SHA-256 等符合现代标准的更安全替代方案。附前后端完整代码实现示例!

2024-07-27

Base64编码解码详解【2026】- 原理、应用与代码示例

深入系统地学习前端与后端开发中无处不在的 Base64 编码与解码(Encode/Decode)底层运行原理与实战高级应用。彻底掌握如何将复杂的二进制文件数据流安全转换为纯 ASCII 文本字符串序列的核心技术。文章包含 JavaScript、Python、Java 多语言的完整代码实战示例,全面涵盖前端图片 Data URL 优化内联、后端 JWT(JSON Web Token)安全令牌生成、以及跨域 HTTP 基本身份认证(Basic Auth)等高频常见业务场景。

2024-01-15