HMAC消息认证码

在线生成HMAC消息认证码,支持MD5/SHA1/SHA256/SHA512算法,所有计算在浏览器本地完成

关于 HMAC
  • HMAC(基于哈希的消息认证码)结合密钥和哈希函数,同时验证数据完整性和来源真实性
  • 与普通哈希不同,HMAC 需要密钥,没有密钥无法伪造,常用于 API 签名、JWT 签名、Webhook 验签
  • HMAC-SHA256 是目前最常用的方案,兼顾安全性和性能
操作说明
  • 选择哈希算法,输入消息内容和密钥,点击「生成HMAC」
  • 密钥支持 UTF-8 文本或十六进制字节串两种格式
  • 输出支持 Hex、Base64、Base64URL 三种格式,可按需切换
  • 支持 Ctrl+Enter 快捷键触发生成
注意事项
  • 密钥长度建议与哈希输出长度一致(SHA256 建议 32 字节,SHA512 建议 64 字节)
  • 密钥选择「十六进制」时,只能包含 0-9a-f 字符(如 deadbeef),奇数位时会自动补0
  • 所有计算均在浏览器本地完成,消息和密钥不会上传至服务器
HMAC 知识详解
HMAC 工作原理

HMAC 的计算公式:

HMAC(K, m) = H((K' ⊕ opad) || H((K' ⊕ ipad) || m))
  • H:哈希函数(MD5/SHA1/SHA256/SHA512)
  • K:密钥,K' 为填充到块大小的密钥
  • ipad:内部填充(0x36 重复),opad:外部填充(0x5C 重复)
  • 两次哈希运算确保即使哈希函数存在长度扩展攻击,HMAC 仍然安全
各算法输出长度对比
算法输出位数Hex 长度Base64 长度安全性
HMAC-MD5128 bit32 字符24 字符⚠️ 已不推荐
HMAC-SHA1160 bit40 字符28 字符⚠️ 逐渐淘汰
HMAC-SHA256256 bit64 字符44 字符✅ 推荐
HMAC-SHA512512 bit128 字符88 字符✅ 高安全
常见应用场景
场景常用算法说明
JWT 签名HMAC-SHA256HS256 算法,签名 Header.Payload
API 请求签名HMAC-SHA256AWS SigV4、微信支付签名等
Webhook 验签HMAC-SHA256GitHub、Stripe 等平台的 Webhook 安全验证
Cookie 防篡改HMAC-SHA256对 Cookie 值签名,防止客户端篡改
文件完整性HMAC-SHA512验证文件传输过程中未被篡改
输出格式差异
格式字符集长度(SHA256)典型用途示例
Hex 0-9 a-f 64 字符 调试、日志、数据库存储 b94d27b9...
Base64 A-Z a-z 0-9 + / = 44 字符 HTTP Header、邮件传输 uU0nuZNNPgilLlLX...
Base64URL A-Z a-z 0-9 - _(无 = 43 字符 JWT、URL 参数、Cookie uU0nuZNNPgilLlLX...
  • Hex 可读性最好,但长度是 Base64 的约 1.5 倍
  • Base64 比 Hex 紧凑,但含 + / = 字符,放入 URL 时需要额外编码
  • Base64URL 是 Base64 的 URL 安全变体,将 + 替换为 -/ 替换为 _,去掉末尾 =,可直接用于 URL 和 JWT
代码示例

JavaScript(Node.js)

const crypto = require('crypto');
const hmac = crypto.createHmac('sha256', 'secret');
hmac.update('Hello World');
console.log(hmac.digest('hex'));

Python

import hmac, hashlib
h = hmac.new(b'secret', b'Hello World', hashlib.sha256)
print(h.hexdigest())