HMAC签名生成器
在浏览器本地生成 HMAC 消息签名,支持 SHA-1/256/384/512,输出 Hex 或 Base64。
HMAC签名生成器使用指南
📌 简介
HMAC签名生成器是一款面向开发者的在线加密工具,用于生成 HMAC(Hash-based Message Authentication Code,基于哈希的消息认证码)签名。HMAC 结合了哈希算法和密钥,既能验证消息完整性,又能验证消息来源,广泛用于 API 签名、Webhook 校验、JWT 签名等场景。本工具基于浏览器原生 Web Crypto API,签名计算完全在本地完成,密钥和消息不会上传到任何服务器。
📖 HMAC 的原理与安全边界
HMAC 的算法可以简单表示为 HMAC(K, M) = H((K' ⊕ opad) || H((K' ⊕ ipad) || M)),其中 K 是密钥,M 是消息,H 是哈希函数,K' 是密钥经过填充或哈希处理后的结果,ipad 和 opad 是两个固定常量。相比直接用 H(K + M),HMAC 能抵御长度扩展攻击,安全性更高。常见算法包括 HMAC-SHA1、HMAC-SHA256、HMAC-SHA384、HMAC-SHA512,其中 SHA-1 已被认为不安全,新项目应优先使用 SHA-256 及以上。需要强调的是,HMAC 只能保证消息完整性和来源认证,不能提供加密功能,敏感数据仍需配合 AES 等对称加密使用。
💼 常见应用场景
- API 签名:对请求参数按规则拼接后用 HMAC 签名,服务端验签防止篡改。
- Webhook 校验:GitHub、Stripe 等平台通过 HMAC 签名验证回调来源。
- JWT 签名:HS256、HS384、HS512 算法底层就是 HMAC。
- 文件完整性:对文件内容生成 HMAC,传输后校验是否被篡改。
- 调试对比:与后端代码生成的签名结果对比,排查签名不一致问题。
⚙️ 使用步骤
- 选择哈希算法(推荐 HMAC-SHA256)和输出格式(Hex 小写、Hex 大写或 Base64)。
- 在“密钥”输入框中填写共享密钥,在“消息内容”中填写需要签名的原始字符串。
- 点击“生成签名”按钮,下方输出框显示签名结果。
- 点击“复制签名”把结果复制到剪贴板,用于与后端结果对比或填入请求头。
⚠️ 注意事项
- Web Crypto API 只在 HTTPS 或 localhost 环境下可用,HTTP 页面会提示“不支持 Web Crypto”。
- HMAC-SHA1 已被认为不安全,仅用于兼容老系统,新项目请使用 SHA-256 及以上。
- 密钥长度建议不低于哈希输出长度(如 SHA-256 建议 32 字节以上),过短的密钥会降低安全性。
- 消息内容的编码方式(UTF-8)必须与服务端一致,否则签名结果不同。
- 本工具只负责计算签名,不负责密钥管理,生产环境的密钥应存放在服务端安全存储中,不要硬编码在前端。
❓ 常见问题 (FAQ)
Q: 为什么我的签名结果和后端不一致?
A: 常见原因有:密钥或消息的编码不同(如 UTF-8 与 GBK)、消息末尾多了换行、算法或输出格式选错、服务端对消息做了额外处理(如排序、拼接)。建议逐项对比。
Q: Hex 和 Base64 应该选哪个?
A: 取决于对接方的要求。Hex 更易读、便于日志排查,Base64 更短、适合放在 URL 或 HTTP 头中。与后端保持一致即可。
Q: 密钥会上传到服务器吗?
A: 不会。签名完全由浏览器 Web Crypto API 在本地计算,密钥和消息不会离开你的设备。