什么是 HMAC?

HMAC(基于哈希的消息认证码)是一种加密技术,将密钥与哈希函数结合以验证消息的完整性和真实性。它确保数据未被篡改并来自可信来源。

快速了解

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

HMAC 工作原理

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. 协议中的消息认证

示例

HMAC 计算:

消息: "Hello, World!"
密钥: "my-secret-key"
算法: HMAC-SHA256

结果: 5f8c9f4e3a2b1c0d9e8f7a6b5c4d3e2f1a0b9c8d7e6f5a4b3c2d1e0f9a8b7c6d

JavaScript (Node.js):
const crypto = require('crypto');
const hmac = crypto.createHmac('sha256', 'my-secret-key');
hmac.update('Hello, World!');
const signature = hmac.digest('hex');

Python:
import hmac
import hashlib

signature = hmac.new(
    b'my-secret-key',
    b'Hello, World!',
    hashlib.sha256
).hexdigest()

API 签名示例:
时间戳: 1704067200
方法: POST
路径: /api/orders
正文: {"item": "widget"}

待签名字符串: "1704067200.POST./api/orders.{\"item\":\"widget\"}"
HMAC-SHA256 签名: <计算的签名>

QubitTool 相关工具

相关概念