Auth Tools
Token Decoder
Work out whether a token is a JWT, a UUID, hex, or Base64, estimate its entropy, and get the digest to match against your records.
Understand the format
How Token Decoder works
An unidentified token still tells you a great deal: its alphabet reveals the encoding, its length bounds the entropy, and its structure says whether it is a secret or a label.
Reading a token by its alphabet
Format detection is mostly a matter of which characters appear. Only 0-9 and a-f, with an even length, means hexadecimal. Hyphens and underscores alongside letters and digits point to Base64URL; plus and slash with trailing equals signs point to standard Base64. Three dot-separated Base64URL segments is a JSON Web Token. Eight-four-four-four-twelve hexadecimal digits is a UUID.
Those distinctions matter because they tell you what to do next. A JWT should be decoded and its claims read. A UUID is an identifier and probably not a secret at all. A random Base64URL string is opaque: there is nothing inside it, and the only useful questions are how much entropy it has and what the server stored alongside it.
What an entropy estimate can and cannot tell you
Entropy is estimated as the length of the random part multiplied by the bits each character can carry: six bits for Base64, four for hexadecimal. A 43-character Base64URL body therefore tops out at about 256 bits. Any identifiable prefix such as at_ or ghp_ is excluded from the count, because a fixed label adds no unpredictability.
The figure is an upper bound, and only an upper bound. It assumes every character came from a cryptographic random source. A token built from a timestamp, a counter, an encoded user id, or the output of Math.random can look identical and carry far less real entropy. That is why a value that decodes into readable text is flagged here: if you can read something inside it, it was never random.
Matching a token against what the server stored
A well-built system stores the SHA-256 of each token rather than the token itself, so the digest is shown here for direct comparison against a database column. If it matches a stored row, the token in your hand is that record; if nothing matches, either the token was never issued, or the system is storing plaintext, which is worth fixing.
One caution while investigating: a token found in a log, a bug report, or a screenshot should be treated as compromised regardless of what you learn about it. The right response is revocation and rotation, not analysis alone.
Step by step
How to use Token Decoder
- Paste the token exactly as you found it, including any prefix.
- Read the detected format and the entropy estimate, and note the strength verdict.
- If it is identified as a JWT, open it in the JWT Decoder to read the claims.
- Compare the SHA-256 with the digest column in your token table to identify which record it belongs to.
- If the value decodes to readable text, treat everything inside it as public.
The token is analysed and hashed in your browser. Nothing is transmitted, logged, or retained, which is what makes it reasonable to inspect a credential you found during an investigation.
Troubleshooting
Common mistakes and how to fix them
- Assuming a long token is automatically a strong one.
- Length only sets a ceiling. A predictable generator produces long, guessable tokens; check how the value is created, not just how it looks.
- Treating a UUID in a URL as a credential.
- UUIDs identify records. Authorise every request on the server rather than relying on the identifier being unguessable.
- Pasting a live production token into a tool to inspect it.
- Processing here is local, but the token is still on your clipboard and in your session. Prefer an expired sample, and rotate anything that has been handled loosely.