JWT 在线解析与签名验证生成

解析 · 生成签名 · 验证签名 · HS256 / RS256 / ES256 · 本地完成
纯本地处理 · Token 与密钥不上传 四色笔记 ↗
Payload 只是 Base64URL 编码,不是加密。任何人拿到 Token 都能解出原文,不要把密码、身份证号等敏感信息放进未加密的 JWT。解析成功也不代表签名有效,只有「验证签名」通过才能说明内容未被篡改。

Token

粘贴或输入 JWT,自动解析三段结构

操作

只看内容,不判断真假
Header(头部 · 算法与类型)
—
Payload(载荷 · 声明)
—
Signature(签名 · 原始 Base64URL)
—

JWT 在线解析与签名验证生成使用指南

JWT 解析:解开三段不等于验证通过

JWT 签名验证:HS256 与 RS256 的密钥怎么给

JWT 过期检查:exp、nbf 与时钟偏差

JWT 生成:自己签一个测试 Token

关于这个 JWT 解析与签名工具

一个 JWT(JWS)是用点号分隔的三段:Header、Payload、Signature,前两段是 Base64URL 编码的 JSON,第三段是签名。本工具把这三件事分开做:解析 Token 只把三段解开并格式化展示,谁都能自己改完再编码,所以解析成功不代表签名有效;生成签名 用你给的密钥按所选算法算出签名;验证签名 才用密钥重算并比对,同时逐项检查 exp、nbf、iat、iss、aud 等标准声明,每一项都给出通过与失败原因。

算法分两类,页面会按所选算法切换对应的密钥输入:HS256 / HS384 / HS512 是 HMAC 对称算法,签发与验证用同一串共享密钥;RS256 / RS384 / RS512、PS256 / PS384 / PS512、ES256 / ES384 / ES512 是非对称算法,生成签名需要 PKCS#8 私钥(-----BEGIN PRIVATE KEY-----),验证需要 SPKI 公钥(-----BEGIN PUBLIC KEY-----)。老式的 -----BEGIN RSA PRIVATE KEY----- 会自动转换成 PKCS#8;密钥与算法不匹配、缺少密钥、密钥解析失败都会给出明确原因,而不是笼统地说失败。

时间声明按当前本机时间检查:exp 超过即判为已过期,nbf 早于它即判为尚未生效,都可以设置允许的时钟偏差秒数来容忍服务器之间的时间差;没有 exp 时会明确提示该 Token 永不过期。签名与校验全部调用浏览器内置的 Web Crypto,不引入任何第三方库、不依赖外部 CDN,页面没有接口,Token 与密钥不上传、不写进 localStorage、URL 或日志,刷新即消失。

常见问题

解析成功就代表 Token 有效吗?

不代表。解析只是把三段 Base64URL 解开并显示出来,任何人都能改 Payload 后重新编码;只有「验证签名」用正确密钥算出一致的签名,才能说明内容没被篡改且确实由持有密钥的一方签发。页面把解析、生成、验证分成三件事,解析结果旁也会明确提示尚未验证签名。

支持哪些签名算法?

支持 HMAC 系列的 HS256、HS384、HS512,RSA 的 RS256、RS384、RS512 与 PS256、PS384、PS512,以及 ECDSA 的 ES256、ES384、ES512。签名与验证全部使用浏览器内置的 Web Crypto,不引入任何第三方库,也不依赖外部 CDN。

生成 RS256 或 ES256 需要什么密钥?

HMAC 系列填一串共享密钥即可;RS、PS、ES 系列需要 PKCS#8 格式的私钥(以 -----BEGIN PRIVATE KEY----- 开头),验证时填 SPKI 格式的公钥(以 -----BEGIN PUBLIC KEY----- 开头)。老式的 -----BEGIN RSA PRIVATE KEY----- 会自动转换成 PKCS#8,EC 私钥请先转成 PKCS#8 再粘贴。

exp 和 nbf 是怎么检查的?

exp 是过期时间,当前时间超过它就判为已过期;nbf 是生效时间,当前时间早于它就判为尚未生效。两者都可以设置允许的时间偏差秒数,用来容忍服务器之间的时钟差异。没有设置 exp 时会明确提示该 Token 永不过期,而不是当作通过。

密钥和 Token 会被上传吗?

不会。解析、生成与验证都在浏览器里用 Web Crypto 完成,页面没有任何接口,不发出携带 Token 或密钥的网络请求,也不会把它们写进 localStorage、URL 或日志。刷新页面后输入框里的内容全部消失。

Payload 里能放敏感信息吗?

不能。JWT 的 Header 和 Payload 只是 Base64URL 编码,不是加密,任何人拿到 Token 都能直接解出原文;只有 JWE 才是加密令牌。所以不要把密码、身份证号、令牌等敏感信息放进未加密的 JWT,需要保密的数据请改用 JWE 或只放不敏感的标识。