GrepBoardTools GrepBoard 매뉴얼 ↗ Log ↗

Tools / 텍스트·인코딩

Base64 · URL 인코딩 · JWT 풀기

Base64 글, URL 인코딩 값, eyJhbGciOi… 같은 JWT 를 붙여 넣습니다.

입력한 값은 브라우저 안에서만 계산하고 서버로 보내지 않습니다.

🔒 이 값은 이 브라우저 밖으로 나가지 않습니다.

무엇을 하나

  • 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 와 브라우저 시각으로, 지금 만료됐는지를 보여 줍니다. 서명은 검증하지 않습니다.

예시

넣은 값결과
한글 → Base647ZWc6riA
a → Base64 / Base64url 패딩 없음YQ== / YQ
>>>? → Base64 / Base64urlPj4+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 와 python quote 를 같다고 보기 — encodeURIComponent 는 ! ' ( ) * 를 그대로 둡니다.

자주 묻는 것

서명이 맞는지도 확인할 수 있나요?

이 도구는 하지 않습니다. 서명 검증에는 비밀 키나 공개 키가 필요하고, 키를 웹 페이지에 넣는 것 자체를 권하지 않습니다. 서버 쪽 라이브러리(PyJWT · jose 등)로 확인합니다.

exp 가 지금과 같은 초이면 만료인가요?

네. RFC 7519 는 exp 시각과 같거나 그 뒤에는 받으면 안 된다고 정합니다. 이 도구도 같은 초를 「만료됨」으로 봅니다. 서버마다 몇 초의 여유(leeway)를 두기도 합니다.

입력한 토큰이 서버로 가나요?

아니요. 이 값은 이 브라우저 밖으로 나가지 않습니다. 계산은 모두 브라우저 안에서 하고 입력값은 주소창이나 브라우저 저장소에도 쓰지 않으며, 이 사이트가 쓰는 방문 통계와 광고에도 넘기지 않습니다. 자세한 것은 개인정보 처리 안내에 있습니다.