如何在线校验数字签名
对任意载荷校验 HMAC、RSA、ECDSA 签名 —— 使用公钥或共享密钥;适用于 API 对接、JWT 与 Webhook 调试。

为什么这个工具重要
厂商 Webhook 校验失败时,原因几乎总是:密钥错、算法错、规范化错、编码错。与其在校验代码里到处插 console.log,不如把消息与签名粘贴进已知正确的校验器比对结果 —— 立刻能判断是代码 bug 还是消息本身有问题。
三个真实场景
粘贴 JWT、公钥,选择 RS256/ES256/HS256,查看「有效」或「无效」。
缩小 bug 到处理逻辑
用厂商公布的 RSA 公钥验证二进制签名。
来源可信
用密钥对载荷签名,与入站头里的值比对。
代码路径验证通过
操作演练
打开 签名校验工具。
粘贴消息
使用被签名的确切字节。对 JWT 来说是
header.payload;对 AWS Sig V4 来说是 canonical string-to-sign。粘贴签名
十六进制或 Base64 —— 选择与来源一致的编码。工具会尝试识别常见格式。
提供密钥
对称:粘贴密钥字符串(或其 Base64/hex)。非对称:粘贴 PEM 格式公钥。
选择算法
HS256 / HS384 / HS512(HMAC),RS256 / RS512(RSA-PKCS1),PS256(RSA-PSS),ES256 / ES384(ECDSA)。JWT 里的 alg 名称与此对应。
阅读结论
「有效」或「无效」;无效时会有一句原因(算法不匹配、密钥解析错误、签名长度不对等)。
输入
Message: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJ1c2VyXzEifQ
Signature: L6S8LWkLzpcREMa8gxaaZbWwLNk0LgcBh6dRQpfIBrI
Key: MyVeryLongSharedSecretValue1234567890
Algorithm: HS256结果
Valid signature.
实用技巧
- 务必用厂商提供的参考向量测试。 多数厂商会公布一组已知正确的消息 + 签名,粘贴后可确认工具是否完全兼容其算法。
- 对 JWT: 复制 header 确认
alg与校验器一致。忽略未签名令牌(alg=none)— 那是攻击面。 - 新 RSA 设计优先 PSS。 PKCS#1 v1.5(RS256)仍常见,但学界更倾向 RSASSA-PSS(PS256)。
- 留心 canonical string。 细微差别(缺一个
\n、header 名大小写)都会翻转签名。与已知良好的抓包 diff 找出差异。
常见陷阱
常见误区
公钥格式不对
PEM 有 BEGIN PUBLIC KEY(SPKI)与 BEGIN RSA PUBLIC KEY(PKCS#1)。工具二者都接受,但要贴公钥(不是证书,也不是私钥)。
常见误区
签名为 Base64URL 却被当 Base64 解析
JWT 签名使用 Base64URL(无填充、-_ 字母表)。请相应设置输入编码或手工处理差异。
常见误区
算法名称不一致
OpenSSL 里的 sha256WithRSAEncryption 与 JWT 里的 RS256 是一类东西。在下拉中选对别名。
不适合用本工具的情况
- 签发证书 请在 OpenSSL 或你的 CA 侧完成。
- 校验 TLS 服务端证书 是浏览器职责;链路验证远比单次签名校验复杂。
- Windows Authenticode、Apple Developer ID 等代码签名 需要平台专用工具。
常见问题
能在这里校验 Stripe / GitHub Webhook 吗?
可以。使用 HS256(HMAC-SHA-256)、控制台里的密钥、原始 body 字符串,以及头里的签名值。结果会表明请求是否被篡改。
支持 Ed25519 吗?
Ed25519 校验在路线图中。目前可用 CLI,例如 openssl pkeyutl -verify。
密钥会上传服务器吗?
不会。WebCrypto 在本地运行;密钥不离开浏览器进程。