HMAC 签名计算
编码加密所有处理都在浏览器本地完成,数据不上传服务器
输入
输出
用密钥和消息算出 HMAC 签名,支持 SHA-1、SHA-256、SHA-512,输出十六进制或 Base64。密钥按 UTF-8 字节参与运算,所以含空格、中文或 emoji 的密钥都能与 Node、Java、Python 算出一致的结果 —— 这是对接签名接口时最常踩的坑。密钥必须填写:空密钥在数学上「能算」,但算出来的签名与你想要的结果毫无关系,而且看起来完全正常,所以这里直接拦下来而不是让你拿去服务端撞一堵没有线索的墙。另外,HMAC 与「先拼密钥再哈希」不是一回事,后者存在长度扩展攻击。
功能
- 三种算法:HMAC-SHA1、HMAC-SHA256、HMAC-SHA512
- 密钥与消息分开输入,长消息里不会粘错
- 密钥与消息都按 UTF-8 字节处理,与 Node、Java、Python 结果一致
- 输出十六进制或 Base64
- 空密钥直接报错,不产出「看起来正常」的签名
- 密钥只在本机参与运算,不会因为任何原因发出去
使用方法
- 在「密钥」里填写签名密钥
- 把消息粘贴进输入框
- 选择算法与输出编码,按 Ctrl/⌘ + Enter 或点「运行」
- 点「复制」取走签名
常见问题
- HMAC 和直接对「密钥 + 消息」做哈希有什么区别?
- HMAC 会先把密钥做一次异或填充,再分内外两轮哈希,这个结构让它不受长度扩展攻击影响。而 hash(密钥 + 消息) 若用的是 MD5、SHA-1、SHA-256 这类结构,攻击者能在不知道密钥的情况下续算出更多有效签名。对接接口时不要自己拼字符串。
- 为什么一定要填密钥?
- 空密钥算出来的是「用空字符串做密钥」的签名,数学上合法,但对你没有任何用处,而且看起来和正常签名一模一样 —— 拿去对接只会得到一句没有线索的验证失败。与其让你去猜,不如在这里直接拦住。
- 算出来的签名和别人给的不一样?
- 按顺序排查三件事:密钥是不是按 UTF-8 字节处理(本工具是)、消息里有没有多余的空格或换行、输出编码是不是一致(hex 与 Base64 是同一段字节的两种写法)。前两条对不上时,结果会完全不同。
- 提示「当前环境不提供 Web Crypto」是怎么回事?
- HMAC 走的是浏览器原生接口 crypto.subtle,而它只在安全上下文里存在:https:// 或 localhost / 127.0.0.1。用 http:// 或内网 IP 打开本页时它不可用 —— 这是浏览器的安全策略。请换用 https 地址,或改用别的工具计算。
- 我的密钥会被上传吗?
- 不会。密钥与消息都只在浏览器内存里参与运算,页面不发送任何请求,断网也能用。也正因如此,验证签名这件事同样可以在这里做 —— 但请只在可信的设备上粘贴生产密钥。
相关工具
哈希计算
编码加密算出文本的 MD5、SHA-1、SHA-256 或 SHA-512 摘要,中文按 UTF-8 字节计算,结果与 openssl、sha256sum 逐位一致。全部在本地完成,不上传。
密码生成
生成器生成随机强密码,长度与字符集可调,并实时给出熵值,让「强度」变成一个可以比较的数字。密码只在本机内存里,不记录也不上传。
Base64 编解码
编码加密把文本转成 Base64,或把 Base64 还原成文本,中文与 emoji 都按 UTF-8 正确处理。全部在浏览器本地完成,内容不上传。
URL 编解码
编码加密把中文、空格与符号转义成 %XX,或把 %XX 还原成文本;整条 URL 与单独的参数值要选对方式,选错不会报错,但链接会打不开。全部在浏览器本地完成。
HTML 实体编解码
编码加密把 < > & 与引号转成 HTML 实体,也能把实体还原成字符,而且只解一遍:&lt; 得到的是 < 而不是尖括号。全部在浏览器本地完成。
JWT 解析
编码加密把 JWT 拆成 header、payload、signature 三段并格式化,把 iat、exp 等时间声明换算成可读时间。只解析、不验证签名,输出里会写明。全部在浏览器本地完成,不上传。