무엇을 하나
- Base64: 글자를 UTF-8 바이트로 바꿔 표준(
+ /) · URL-safe(- _) · 패딩 없는 꼴로 인코딩하고, 어느 꼴이든 받아 풉니다. 풀린 바이트가 UTF-8 이 아니면 글자를 지어내지 않고 16진 바이트만 보입니다. - URL 인코딩: RFC 3986 의 unreserved(
A–Z a–z 0–9 - . _ ~) 밖은 모두%XX로 바꿉니다. 폼 방식은 공백을+로 씁니다.%뒤가 16진수 두 자리가 아니면 고쳐서 풀지 않고 위치를 알려 줍니다. - JWT: 점으로 나뉜 세 부분 중 머리와 본문을 풀고
iat·nbf·exp를 UTC 와 브라우저 시각으로, 지금 만료됐는지를 보여 줍니다. 서명은 검증하지 않습니다.
예시
| 넣은 값 | 결과 |
|---|---|
한글 → Base64 | 7ZWc6riA |
a → Base64 / Base64url 패딩 없음 | YQ== / YQ |
>>>? → Base64 / Base64url | Pj4+Pw== / Pj4-Pw== |
a b&c → URL / 폼 방식 | a%20b%26c / a+b%26c |
YQ= | 오류 — 「=」 가 2개여야 하는데 1개 |
caf%C3 | 오류 — 풀린 바이트가 UTF-8 이 아님 |
| 점이 하나뿐인 JWT | 오류 — 점이 두 개여야 함 |
어떻게 확인했나
공개 전에 python3 표준 라이브러리와 124가지를 대조해 모두 맞았습니다: 글 29개(한글 · 이모지 · 제어 문자 · BOM 포함)의 Base64 네 꼴 인코딩과 왕복, urllib.parse.quote(s, safe='') · quote_plus 와 같은 결과, UTF-8 이 아닌 바이트 9개, hmac 으로 만든 HS256 JWT 12개(본문 값은 python json 으로 다시 비교 — 큰 정수 12345678901234567890 도 자릿수 그대로), 깨진 입력 29개(패딩 틀림 · 잘못된 글자 · 점 개수 틀린 JWT 등)가 모두 오류로 나오는지.
흔한 실수
- JWT 를 「풀었으니 믿을 수 있다」고 여기기 — 머리 · 본문은 서명 없이 누구나 만들 수 있습니다. 서버에서 키로 검증해야 합니다.
- 표준 Base64 를 URL 에 그대로 넣기 —
+는 폼에서 공백으로,/는 경로로 읽힙니다. URL 에는 Base64url 을 씁니다. - JavaScript 의
btoa('한글')— Latin-1 밖 글자는 오류입니다. 먼저 UTF-8 바이트로 바꿔야 합니다. encodeURIComponent와 pythonquote를 같다고 보기 —encodeURIComponent는! ' ( ) *를 그대로 둡니다.
자주 묻는 것
서명이 맞는지도 확인할 수 있나요?
이 도구는 하지 않습니다. 서명 검증에는 비밀 키나 공개 키가 필요하고, 키를 웹 페이지에 넣는 것 자체를 권하지 않습니다. 서버 쪽 라이브러리(PyJWT · jose 등)로 확인합니다.
exp 가 지금과 같은 초이면 만료인가요?
네. RFC 7519 는 exp 시각과 같거나 그 뒤에는 받으면 안 된다고 정합니다. 이 도구도 같은 초를 「만료됨」으로 봅니다. 서버마다 몇 초의 여유(leeway)를 두기도 합니다.
입력한 토큰이 서버로 가나요?
아니요. 이 값은 이 브라우저 밖으로 나가지 않습니다. 계산은 모두 브라우저 안에서 하고 입력값은 주소창이나 브라우저 저장소에도 쓰지 않으며, 이 사이트가 쓰는 방문 통계와 광고에도 넘기지 않습니다. 자세한 것은 개인정보 처리 안내에 있습니다.