Создание и проверка JWT
Подпись HS256 · разбор на три части · состояние срока действия exp/nbf/iat · проверка тем же ключом
生成:Header + Payload + 密钥 → 三段式 token
密钥只存在于页面内存:不上传、不写 localStorage,刷新或关闭页面即消失。
使用前请先看清楚:本页适合什么、不适合什么
① 「验签通过」不等于「token 可信」。验签通过只证明「这个 token 的签名与你输入的密钥匹配」——也就是持有这把密钥的人产出了它。谁签发的(iss)、给谁的(sub/aud)、携带什么权限、有没有被滥用,页面都替不了签发服务背书。生产环境请走签发服务自己的校验逻辑。
② 本页只实现 HS256(对称密钥)。HS256 的签名与验签用同一把密钥:密钥一旦泄露,任何人都能伪造合法 token。真实系统普遍使用 RS256 / ES256 等非对称算法(公钥验签、私钥签发);本页不实现它们,遇到这类 token 会如实说「只能解析、无法验签」。
③ token 与密钥不上传、不留存。签名与验签由浏览器内置的 WebCrypto(HMAC-SHA256)在本地完成,页面不发起任何网络请求、不写 localStorage 或 cookie,刷新即清空;密钥不会被存到任何地方。
④ 本页不保管密钥、也不提供密钥管理。不要把生产密钥长期留在这类网页里;本页的定位是调试、联调与学习(看懂 token 结构、核对签名、检查有效期)。
什么是 JWT,这个 JWT 生成器 / 解析器能做什么
JWT(JSON Web Token)是三段用英文句点连接的字符串:Header.Payload.签名。Header 声明算法(如 HS256),Payload 携带声明(claims,如 sub 主体、exp 过期时间),签名是对「前两段拼接结果」用密钥做的 HMAC-SHA256 计算——任何一段被改动,签名都会对不上。三段各自用 base64url 编码,所以内容可以直接肉眼读出,JWT 不是加密格式,Payload 里的内容对所有人可见,不要把密码、证件号这类敏感数据写进 Payload。
本页做三件事:生成——编辑 Header 与 Payload 的 JSON、填写密钥,在浏览器里完成 HS256 签名并拼出标准 token(exp 支持按 1 小时 / 1 天 / 7 天 / 30 天快速填写);解析——粘贴任意 JWT,拆出三段、解码显示 JSON,并对 exp / nbf / iat 给出本地时间与「还剩多久过期 / 已过期多久 / 尚未生效」的状态提示;验签——用相同密钥重新计算签名,与 token 里的签名逐字节比对,告诉你匹配与否。
exp、nbf、iat 都是 Unix 时间戳(秒):exp 过期时间(之后应被拒绝)、nbf 生效时间(之前不算有效)、iat 签发时间。排查「token 为什么被拒」时,先解析看这三个值,再核对服务端时钟与签发参数。
为什么能做到不上传?签名与验签用的是浏览器内置的 WebCrypto(HMAC-SHA256),密钥与 token 全程只在本机内存里参与计算,页面不发起任何网络请求——你可以在开发者工具的 Network 面板核验(只会看到页面自身与统计脚本的请求)。唯一的限制:WebCrypto 只在安全上下文(https 或 localhost)开放,http 打开时生成与验签不可用,解析不受影响。
Частые вопросы
Три вещи. Генерация: правите claims Header и Payload как JSON, вводите ключ подписи - страница считает подпись HMAC-SHA256 (HS256) прямо в браузере и собирает стандартный трёхчастный токен. Разбор: вставляете готовый токен, он делится на Header / Payload / подпись, показывается декодированный JSON и местное время со статусом для exp/nbf/iat. Проверка: подпись пересчитывается тем же ключом и сравнивается с подписью токена. Всё выполняется локально в браузере - регистрация не нужна.
Это не доказывает ровным счётом ничего, кроме одного: подпись токена подходит под введённый вами ключ - тот, у кого есть этот ключ, и произвёл токен. Достоверность зависит от выпустившего сервиса: кто выпустил (iss), для кого (sub/aud), не истёк ли (exp), какие права несёт - страница за это не ручается. К тому же HS256 - симметричный алгоритм: любой обладатель того же ключа способен подделать верную подпись. Продакшеновые токены проверяйте собственной логикой выпустившего сервиса (включая асимметричные RS256/ES256); страница - для отладки и обучения.
exp - срок годности (после этого момента токен следует отклонять), nbf - время вступления в силу (до него токен ещё не действителен), iat - время выпуска; всё это метки Unix в секундах. После разбора страница показывает каждое в вашем местном времени и относительно текущего - сколько до истечения, сколько оно длится, или ещё не в силе: окно действия видно с одного взгляда.
Нет. Токен и ключ участвуют только в локальном вычислении внутри браузера (WebCrypto HMAC-SHA256): страница не делает сетевых запросов, ничего не пишет в localStorage или куки, перезагрузка стирает. Ключ нигде не хранится - закрыли страницу, и на машине копии не осталось.
Браузер открывает криптоинтерфейс crypto.subtle только в защищённом контексте (https или localhost), а страница использует его для подписи и проверки HMAC. При открытии по http генерация и проверка отключаются с баннером вверху; разбор этого интерфейса не требует и работает. Перейдите на https - работает всё.