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.

Start here Paste the token exactly as you found it, including any prefix.

Base64URL

Length
46 characters
Prefix
at_
Alphabet
A-Z, a-z, 0-9, hyphen, and underscore
Entropy (upper bound)
258 bits

About 258 bits of entropy: comfortably beyond brute force for a bearer token.

SHA-256, to match your stored digest

  • The at_ prefix is an identifiable label, not entropy. It helps secret scanners spot the token if it leaks.

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

  1. Paste the token exactly as you found it, including any prefix.
  2. Read the detected format and the entropy estimate, and note the strength verdict.
  3. If it is identified as a JWT, open it in the JWT Decoder to read the claims.
  4. Compare the SHA-256 with the digest column in your token table to identify which record it belongs to.
  5. 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.

Worked examples

Token Decoder examples explained

A prefixed opaque access token

Input

at_5Qm5Xk2rJvN0pB7dYw3TcLzR8sHfKq1uAeGiOnM4Vb0

Result

Base64URL, prefix at_, 43-character body, about 258 bits

The prefix is excluded from the estimate. Comfortably above the 128-bit floor for a bearer credential.

A token that is not random at all

Input

dXNlcl9pZD00Mjtyb2xlPWFkbWlu

Result

Base64URL that decodes to user_id=42;role=admin

Readable output means the value encodes data rather than randomness. Anyone can decode it, and anyone can forge a variant unless a signature protects it.

Reference

Identifying a token at a glance

Identifying a token at a glance
ShapeFormatWhat it means
Three parts split by dotsJSON Web TokenSelf-describing. Decode it and check the signature server-side.
8-4-4-4-12 hex digitsUUIDAn identifier, not a secret. Roughly 122 random bits in version 4.
32 or 64 hex charactersMD5 or SHA-256 digestProbably a stored fingerprint rather than a credential.
43 Base64URL charactersOpaque token, 256 bitsThe output of 32 CSPRNG bytes. A typical access token.
Short prefix then random textPrefixed API keyThe prefix aids secret scanning; the entropy is in the rest.
Decodes to readable textEncoded dataNot a random secret. Its contents are public to any holder.

Practical Guide

How teams use Token Decoder

Common use cases

  • Work out what an unfamiliar credential in a log, config file, or bug report actually is.
  • Audit whether tokens issued by an internal service carry enough entropy.
  • Match a token from a support ticket to the record that issued it, using the digest.
  • Show a colleague why an encoded identifier is not a substitute for a signed or random token.

Checks before trusting the result

  • The entropy figure is an upper bound; a structured token carries less than its length suggests.
  • Detection is based on shape alone, so a short random string can resemble several formats at once.
  • Treat any token you found outside its intended channel as compromised, whatever the analysis says.

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.

FAQ

Token Decoder questions, answered

Can this recover what is inside an opaque token?

No, because there is nothing inside it. An opaque token is random bytes; the meaning lives in the row the authorisation server stored. Only encoded formats such as Base64 or a JWT carry readable content.

How is the entropy estimated?

Length multiplied by the bits per character of the detected alphabet, with any identifiable prefix removed. It is an upper bound that assumes a cryptographic random source.

How much entropy should a token have?

128 bits is the practical floor for a bearer credential and 256 bits is a comfortable default. Below 64 bits, offline guessing becomes realistic.

Why show a SHA-256 of the token?

Because a well-designed system stores that digest instead of the token. It lets you match a token in hand against a database row without ever storing the plaintext.

It says my token is a JWT. What now?

Open it in the JWT Decoder to read the header and claims and to convert the timestamps. Remember that decoding proves nothing about the signature.

Is the token sent anywhere?

No. Detection and hashing both run in this page using standard browser APIs, and nothing is stored after you leave.

Go deeper

Specifications and guides