Tidy Dev Tools

Base64 Decode

Paste Base64 to see the original text. Invalid characters are pointed out.

Decoded 45 bytes of UTF-8 text

Text
Hello, World! Zażółć gęślą jaźń 😀

Updates as you type. Ctrl+Enter (⌘+Enter on Mac) in the input processes immediately and jumps to the first error.

Why decoding fails

  • Invalid characters: only A–Z, a–z, 0–9, +, / (or -, _) and = are allowed. The status line shows the position of the first offender.
  • Binary data: if the bytes are an image, a PDF or a ZIP archive, they are not text. Save them with a file decoder instead of reading them here.
  • Truncated input: a single leftover character cannot be decoded. Check that you copied the whole string, including any trailing equals signs.

Line breaks, as in PEM certificates and MIME e-mail bodies, and missing = padding are accepted automatically.

How to recognise Base64

Typical signs: a long run of letters and digits without spaces, a length divisible by four, and one or two = at the end. Strings starting with eyJ are usually Base64-encoded JSON, because {" always encodes to those three characters — the first two parts of every JWT start that way.

Decoding a token only reveals its contents; payload claims like expiry dates, user identifiers and granted scopes are readable by anyone holding it. It does not prove the token is genuine; signature verification needs the issuer's key.

Decoding in code

  • JavaScript: new TextDecoder().decode(Uint8Array.from(atob(b64), (c) => c.charCodeAt(0))) keeps UTF-8 intact; atob alone garbles accented letters.
  • Python: base64.b64decode(s).decode('utf-8'); add validate=True to reject stray characters.
  • Shell: base64 --decode file.txt on Linux, base64 -D on older macOS.

The tool works with any Unicode text: it converts text to UTF-8 bytes first, so accented letters and emoji survive the round trip. It runs entirely in your browser; nothing is sent to a server.

Need the opposite? Use Base64 encode.

Questions

Why do I see strange symbols like é after decoding elsewhere?

The bytes were UTF-8 but were read as Latin-1. This decoder always interprets bytes as UTF-8 and refuses invalid sequences instead of printing mojibake.

Is it safe to paste secrets?

Decoding happens locally in your browser tab; nothing travels over the network. Still, treat decoded credentials as exposed if you copied them into shared chat or tickets.

What about Base32 or Base58?

They use different alphabets — Base32 for TOTP seeds, Base58 for Bitcoin addresses — and will be rejected here as invalid characters.