What it does
- Base64: text is turned into UTF-8 bytes and encoded as standard (
+ /), URL-safe (- _) and unpadded Base64; any of these forms is accepted for decoding. If the decoded bytes are not UTF-8, no text is invented — only the hex bytes are shown. - URL encoding: everything outside the RFC 3986 unreserved set (
A–Z a–z 0–9 - . _ ~) becomes%XX. Form style writes spaces as+. A%not followed by two hex digits is reported with its position, not repaired. - JWT: the header and payload of the three dot-separated parts are decoded, and
iat,nbfandexpare shown in UTC and browser time with the current expiry status. The signature is not verified.
Examples
| Input | Result |
|---|---|
한글 → Base64 | 7ZWc6riA |
a → Base64 / Base64url without padding | YQ== / YQ |
>>>? → Base64 / Base64url | Pj4+Pw== / Pj4-Pw== |
a b&c → URL / form style | a%20b%26c / a+b%26c |
YQ= | error — 2 “=” expected, 1 found |
caf%C3 | error — the decoded bytes are not valid UTF-8 |
| a JWT with one dot | error — a JWT has two dots |
How the check was made
Before release 124 cases were compared with the Python 3 standard library, all matching: four Base64 forms and round trips for 29 texts (Korean, emoji, control characters, a BOM), results equal to urllib.parse.quote(s, safe='') and quote_plus, 9 non-UTF-8 byte strings, 12 HS256 JWTs made with hmac (payload values compared again with Python json — the big integer 12345678901234567890 keeps all its digits), and 29 broken inputs (wrong padding, bad characters, JWTs with the wrong number of dots …) that must all give an error.
Common mistakes
- Trusting a JWT because it decodes — anyone can write a header and payload. Verify the signature on the server with the key.
- Putting standard Base64 into a URL —
+is read as a space in forms and/as a path separator. Use Base64url in URLs. - JavaScript
btoa('한글')— characters outside Latin-1 throw. Convert to UTF-8 bytes first. - Treating
encodeURIComponentas Pythonquote—encodeURIComponentleaves! ' ( ) *as they are.
FAQ
Can it check the signature too?
Not this tool. Verification needs the secret or public key, and putting keys into a web page is not recommended. Verify on the server with a library such as PyJWT or jose.
Is a token expired when exp equals the current second?
Yes. RFC 7519 says a token must not be accepted on or after the exp time, and this tool marks that second as expired. Servers often allow a few seconds of leeway.
Is the token I paste sent to a server?
No. This value never leaves this browser. Everything is calculated locally, the input is not written to the address bar or browser storage, and it is not passed to the visitor statistics or the ads this site uses. Details are on the privacy page.