HMAC 认证工具

HMAC 密钥生成器

生成用于认证与消息完整性校验的 HMAC 密钥。支持 SHA-256、SHA-384、SHA-512,并可自定义长度。

HMAC 密钥

HMAC-SHA-256 • 输出 256 位

256 位
配置
32 字节
1664128
安全强度最佳

32 字节 = 256 位熵

什么是 HMAC 密钥?

HMAC 密钥(基于哈希的消息认证码密钥)用于生成与校验消息认证码。HMAC 结合密钥与哈希函数(如 SHA-256),同时保证消息完整性与来源可信。密钥必须保密,仅在需要生成或校验签名的双方之间共享。

我们的 HMAC 密钥生成器可用于 API 认证、Webhook 签名、会话令牌等安全场景。密钥应随机且足够长,以抵抗暴力破解。

HMAC 密钥长度建议

密钥强度取决于算法与长度。下列配置是常见且安全的选择:

HMAC-SHA-256

最常用算法

32 字节以上

至少 256 bit

HMAC-SHA-384

更高安全强度

48 字节以上

至少 384 bit

HMAC-SHA-512

最高安全强度

64 字节以上

至少 512 bit

常见 HMAC 密钥场景

  • API 认证: 签名 API 请求,确保请求未被篡改且来自可信来源。
  • Webhook 签名: GitHub、Stripe、Shopify 等使用 HMAC 签名 Webhook 负载,便于你验证事件真实性。
  • 会话令牌: 对会话令牌签名,防止会话劫持并保证数据完整性。
  • 数据完整性校验: 校验存储或传输的数据是否被篡改。

如何使用 HMAC 密钥生成器

  1. 1
    选择长度 HMAC-SHA-256 选 32 字节,SHA-384 选 48 字节,SHA-512 选 64 字节。
  2. 2
    启用全部字符类型 字符类型越丰富,随机性越强。
  3. 3
    生成并复制 存入环境变量或密钥管理服务中。

HMAC 密钥使用示例

以下示例演示不同语言中如何使用 HMAC 密钥:

Node.js 示例

const crypto = require('crypto');

const secret = process.env.HMAC_SECRET_KEY;
const message = 'Hello, World!';

const hmac = crypto.createHmac('sha256', secret);
hmac.update(message);
const signature = hmac.digest('hex');

console.log(signature);

Python 示例

import hmac
import hashlib
import os

secret = os.environ['HMAC_SECRET_KEY'].encode()
message = b'Hello, World!'

signature = hmac.new(secret, message, hashlib.sha256).hexdigest()
print(signature)

HMAC 密钥最佳实践

  • 长度足够: 长度应不低于算法输出大小(SHA-256 为 32 字节,SHA-384 为 48 字节,SHA-512 为 64 字节)。
  • 安全存储: 不要硬编码密钥,使用环境变量、密钥管理系统或加密配置文件。
  • 定期轮换: 按周期轮换密钥,发现泄露风险时立即替换。
  • 用途隔离: 不同用途使用不同密钥,避免一把钥匙开多把锁。
  • 校验方式正确: 比较签名时使用常量时间比较,防止时序攻击。
  • 不要记录或暴露: 密钥不应出现在日志、错误信息或前端代码中。

HMAC 密钥生成器常见问题

这个 HMAC 密钥生成器安全吗?

安全。使用 Web Crypto API 生成加密级随机数,密钥在浏览器本地生成,不会上传到服务器。

HMAC 密钥和 JWT 密钥有什么区别?

HMAC 密钥用于通用消息认证;JWT 密钥用于签 JSON Web Token。JWT 使用的 HS256/384/512 本质上也是 HMAC。

可以用同一把密钥跑多种算法吗?

理论上可行,但不推荐。不同算法或用途使用独立密钥更安全,也便于轮换。

如何校验 HMAC 签名?

用密钥重新计算签名并与传入签名比较,建议使用常量时间比较函数(如 Node.js 的 crypto.timingSafeEqual)。

相关密钥生成器

资源入口

隐私与安全

所有 HMAC 密钥均在浏览器本地生成,使用 Web Crypto API 的加密级随机数。不会上传或存储任何数据。