企评社

라벨은 한국어(으)로 표시됩니다. 기업 리뷰, 게시판, 도구 설명은 현재 중국어로만 제공됩니다.

JWT 생성·검증

HS256 서명 · 세 부분 파싱 · exp/nbf/iat 유효 상태 · 같은 키로 검증

token 与密钥只在你浏览器里参与计算,不上传、不留存
使用前必读: 本页只实现 HS256(HMAC-SHA256 对称密钥):签名与验签用同一把密钥,持有同一密钥的人都能产生合法签名。 「验签通过」只表示签名与你输入的密钥匹配,不代表这个 token 可信(签发方、受众、权限以签发服务为准,生产验签请走 RS256/ES256 等非对称算法)。 生成与验签依赖浏览器加密接口(https 或 localhost 安全上下文可用);解析功能不依赖它,http 下也可用。

生成:Header + Payload + 密钥 → 三段式 token

exp 快速填写(自当前时刻):

密钥只存在于页面内存:不上传、不写 localStorage,刷新或关闭页面即消失。

生成的 token(Header.Payload.签名)

使用前请先看清楚:本页适合什么、不适合什么

① 「验签通过」不等于「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 打开时生成与验签不可用,解析不受影响。

자주 묻는 질문

이 JWT 만들기·검사 페이지로 뭘 할 수 있어요?

세 가지예요. 만들기: Header랑 Payload claims 를 JSON 으로 고치고 서명 열쇠를 입력하면, 브라우저에서 HMAC-SHA256 (HS256) 서명을 계산해 표준 세 토막 token 을 조립해요. 풀기: 기존 token 을 붙여넣어 Header / Payload / 서명 세 토막으로 떼고, 푼 JSON 이랑 exp/nbf/iat 같은 선언의 현지 시각이랑 상태를 띄워요. 검사: 같은 열쇠로 서명을 다시 계산해 token 속 서명이랑 견줘요. 전부 브라우저에서 그 자리로 끝나고 등록이 필요 없어요.

'검사 통과'면 이 token 믿을 수 있어요?

그건 이거 하나밖에 안 보여요—서명이 당신이 넣은 열쇠랑 맞는다는 것, 즉 그 열쇠 쥔 사람이 이 token 을 만들어 냈다는 것뿐. 믿음 여부엔 발행 서비스가 관 계예요: 누가 발급했나 (iss), 누구 몫인가 (sub/aud), 기한 안 지났나 (exp), 어떤 권한을 실었나—이 페이지는 아무것도 대신 보증 못 해요. 게다가 HS256 은 대칭열쇠 알고리즘이에요—같은 열쇠 쥔 사람이면 누구나 그럴듯한 서명을 만들 수 있어요. 실전 token 검사는 발행 서비스 자기 검증 논리 (RS256/ES256 같은 비대칭 알고리즘 포함) 로 하세요; 이 페이지는 조사랑 배움용이에요.

exp, nbf, iat 은 무슨 뜻이에요?

exp 는 만료 시각 (이 순간 이후 token 은 거절돼야 해요), nbf 는 효력 시작 (이전엔 아직 유효하지 않아요), iat 은 발급 시각; 다 초 단위 Unix 시각표예요. 풀고 나면 현지 시각이랑 지금 기준 자리 (만료까지 얼마나 남았나·만료된 지 얼마나 됐나·아직 미발효) 를 조항별로 띄워, 유효 창이 한눈에 보여요.

token 이랑 열쇠 올라가요?

안 올라가요. token 이랑 열쇠는 브라우저 그 자리 계산 (WebCrypto HMAC-SHA256) 에만 쓰이고, 요청은 하나도 안 나가고, localStorage·쿠키에 안 남기고, 새로고침하면 지워요. 열쇠는 어디에도 안 저장돼서 페이지 닫으면 기기 안에 사본도 안 남아요.

만들기·검사할 때 'https 로 열어 주세요' 는 왜 떠요?

브라우저가 암호 인터페이스 crypto.subtle 을 안전한 자리 (https 나 localhost) 에서만 열어 주는데, 이 페이지는 HMAC 서명이랑 검사에 그걸 써요. http 로 열면 만들기·검사는 꺼지고 페이지 위에 안내가 떠요; 풀기는 그 인터페이스 안 타서 그대로 돼요. https 로 바꾸면 다 돼요.

관련 도구