✍️ 签名在你自己的浏览器里算,用的是浏览器内置的 Web Crypto。密钥和消息都不会离开这台设备。不要把生产环境的真实密钥粘贴到任何网页,调试用测试密钥即可。

✍️ HMAC 计算

0 字节

⚠️ 签名结果对每一个字节都敏感:多一个空格、换行是 \n 还是 \r\n、字段拼接顺序,都会导致签名对不上。

📤 签名结果

算法 —
摘要长度 —
耗时 —
0 字符
填入期望值后自动比对

📊 HMAC 各算法对比

选哪个主要看对接方要求,安全性上 SHA-256 及以上都没问题。

算法输出长度安全性常见使用场景
HMAC-SHA-120 字节 / 40 位 Hex⚠️ 已不推荐老系统、部分云厂商旧版 API
HMAC-SHA-25632 字节 / 64 位 Hex✅ 推荐绝大多数接口签名、JWT HS256
HMAC-SHA-38448 字节 / 96 位 Hex✅ 推荐JWT HS384、合规要求较高的场景
HMAC-SHA-51264 字节 / 128 位 Hex✅ 推荐JWT HS512、对长度不敏感的场景

⚠️ 使用提示:① 不要把生产环境的真实密钥粘贴进任何网页(包括本工具)——调试请用测试密钥;② 签名不一致时,先查这几处:消息是否多了/少了空格与换行、换行是 \n 还是 \r\n、字段拼接顺序、密钥是文本还是 Hex 解码后、输出是 Hex 还是 Base64;③ HMAC 是对称的:签名方和验签方用的是同一个密钥,密钥泄露等于签名可被伪造;④ 涉及时间戳的接口要注意时钟偏差,本地时间不准会导致验签失败;⑤ 本工具只在浏览器内计算,不保存密钥、不记录消息,但浏览器插件、企业管控软件仍可能读取页面内容,敏感场景请离线处理。

✍️

HMAC 签名计算

加密工具 完全免费 🌙 支持黑夜模式 🔒 本地计算,不上传 🧪 一致性校验 🔤 三种输出编码

对接第三方接口、调 Webhook、验签调不通——最折磨人的不是算法,而是「我算出来的和文档里的对不上」。
这个工具把调试过程变得可观察:
① 四种算法:HMAC-SHA-1 / 256 / 384 / 512;
② 密钥和消息都能选格式:文本、Hex、Base64——因为「密钥到底是字符串本身,还是 Hex 解码后的字节」是最常见的出错点,这里让你明确指定;
③ 三种输出编码:Hex 小写 / 大写、Base64、Base64url,不用再手动转换;
④ 一致性校验:把文档里给的示例签名粘进来,自动比对并显示是否一致——这是本工具最实用的功能,能快速定位到底是算法错还是拼接错;
⑤ 字节数实时统计:一眼看出消息里是不是混进了多余的换行。
全程在你自己的浏览器里完成,用浏览器内置的 Web Crypto 实现,密钥和消息都不会离开这台设备。

类别加密工具
算法HMAC-SHA-1 / 256 / 384 / 512
输出Hex / Base64 / Base64url
运行环境需 HTTPS 或 localhost

核心特性

原生 Web Crypto
四种哈希
密钥 / 消息格式可选
Hex / Base64 / Base64url
一致性校验
字节数统计
示例一键填入
不上传

关于这个工具

怎么实现:
① 导入密钥:`crypto.subtle.importKey('raw', 密钥字节, { name: 'HMAC', hash }, false, ['sign'])`。密钥按你选的格式解码成字节后再导入,不做任何隐式转换;
② 签名:`crypto.subtle.sign('HMAC', key, 消息字节)`。消息同样按所选格式解码,UTF-8 编码由 `TextEncoder` 完成,保证多字节字符(中文、emoji)按字节正确参与计算;
③ 输出编码:Hex 直接按字节转十六进制;Base64 用 `btoa` 分块转换(避免大数组爆栈);Base64url 在此基础上把 `+` → `-`、`/` → `_`,并去掉尾部 `=`;
④ 校验:把你的结果与期望值规范化后比较——统一去掉空白、统一小写,再做字符串比较,避免因为大小写或空格造成误判;
⑤ 注意:这里做的是非恒定时间比较。作为调试工具没问题,但生产环境的验签代码必须使用恒定时间比较(避免计时攻击)。
它不做:不发任何网络请求、不保存密钥、不做 JWT 解析、不做 RSA/ECDSA 签名。

怎么用

  1. 第 1 步
    按对接方文档选好哈希算法(一般是 SHA-256)和输出编码。
  2. 第 2 步
    填密钥,并确认密钥格式:文档给的是字符串就选「文本」,给的是十六进制就选「Hex」。
  3. 第 3 步
    填消息(通常是 timestamp + nonce + body 的拼接结果),注意看字节数是否符合预期。
  4. 第 4 步
    点「✍️ 计算 HMAC」,把结果和文档示例比对。
  5. 第 5 步
    把文档给的签名值粘进「一致性校验」框,一致会显示绿色 ✅。

更新记录

  • v1.0 2026-09-21 工具正式上线:基于浏览器原生 Web Crypto(importKey + sign)实现 HMAC-SHA-1/256/384/512 计算;密钥与消息均可选文本 / Hex / Base64 格式,避免「密钥到底是字符串还是字节」导致的经典错误;输出支持 Hex 大小写 / Base64 / Base64url;内置一致性校验(规范化后比对期望值)与实时字节数统计、示例一键填入。非安全上下文给出明确引导。纯本地零依赖,适配黑夜模式。

常见问题

为什么我算的和文档里的对不上?
按出现频率排序,逐条排查:
① 密钥格式搞错了——文档给的是 Hex 字符串,你当成文本用了(或反过来)。这是第一名;
② 消息里有看不见的字符——结尾多了个换行、JSON 里字段顺序不同、空格被 trim 掉了;
③ 拼接规则不一致——有的要求 `timestamp + nonce + body`,有的要求先排序再拼接;
④ 输出编码不同——对方给的是 Base64,你按 Hex 比;
⑤ 大小写——Hex 有大小写之分(本工具校验时会忽略大小写,但有些服务端不会)。
建议做法:先用文档里的官方示例(通常带一组固定的消息与期望签名)跑一遍,能对上再换成自己的数据。
HMAC 和哈希(SHA-256)有什么区别?
普通哈希(如 `SHA-256(message)`)不带密钥,任何人都能算出同样的值,只能验证「内容没被改」。
HMAC(`HMAC-SHA256(key, message)`)带密钥,只有持有密钥的人才能算出正确的值,因此同时证明了两件事:
① 消息没有被篡改;
② 消息确实来自持有密钥的一方。
所以接口签名用 HMAC,而文件校验用普通哈希就够了。
可以把生产密钥粘进来吗?
不建议。虽然本工具不联网、不保存,但:
① 浏览器插件、企业终端管控软件有能力读取页面内容;
② 密钥进了剪贴板,可能被剪贴板管理器记录;
③ 一旦泄露,攻击者就能伪造任意签名。
调试时请用测试环境的密钥;如果必须用真实密钥,请在离线环境用命令行(如 `openssl dgst -sha256 -hmac`)处理。
Base64 和 Base64url 有什么不同?
Base64 用到了 `+` 和 `/` 两个字符,还会用 `=` 补位——这三个字符在 URL 和文件名里有特殊含义,直接放进网址会被转义或截断。
Base64url (RFC 4648 §5)就是为此设计的:
· `+` → `-`
· `/` → `_`
· 去掉末尾的 `=`
所以放 URL、放 HTTP Header、放 JWT 时用 Base64url;存文件、存数据库用普通 Base64 都行。
HMAC-SHA-1 还能用吗?
HMAC 结构本身对 SHA-1 的碰撞攻击是免疫的(HMAC-SHA-1 目前没有被实用的攻击方法),所以老系统继续跑问题不大。
但新项目不要再用:SHA-1 已被主流标准弃用,很多合规要求(PCI DSS、等保)已经不接受;对接方如果要求 SHA-1,说明对方系统比较老,建议一并推动升级到 SHA-256。

💬 留言板 0

全部留言需审核通过后展示
💬

还没有留言,来抢沙发吧!

✍️ 说点什么
0 / 500
图形验证码