Base64 Encoder and Decoder

Both directions, UTF-8 safe, with the URL-safe alphabet when you need it.

Base64 exists because some channels only carry text. Email bodies, JSON strings, XML documents and URLs all choke on arbitrary bytes, so binary data is re-expressed using 64 characters that survive the trip. This tool converts in both directions, handles accented and non-Latin text correctly, and offers the URL-safe variant that replaces the two characters a URL would otherwise mangle.

How it works

1

Pick a direction

Encode plain text into Base64, or decode Base64 back to text.

2

Paste your input

The result updates as you type, with the size change shown underneath.

3

Switch alphabet if needed

The URL-safe option swaps + and / for - and _ and drops the padding.

What Base64 actually costs

The scheme reads three bytes at a time — 24 bits — and rewrites them as four characters of six bits each. Four characters carrying three bytes means the output is always about a third larger than the input, plus up to two padding characters to round the length to a multiple of four.

That overhead is the reason inlining images as data URIs is a trade-off rather than an optimisation. A 9 KB icon becomes 12 KB of CSS, and unlike a separate file it cannot be cached independently, so every visitor downloads it again with each stylesheet change. Below roughly 2 KB the saved request usually wins; above it, rarely.

Encoding text adds a step before that arithmetic. Base64 encodes bytes, not characters, so the text must first be turned into bytes — and the choice of encoding changes the result. This tool uses UTF-8, where ASCII costs one byte per character while accented, Greek, Cyrillic or CJK characters cost two to four. The byte counter under the result shows the real input size, which is why the same number of characters can produce noticeably different output lengths.

Base64 is not encryption, and the URL-safe variant exists for a reason

Anyone can decode Base64 — that is the entire point, and it takes one function call. It hides nothing. A password, an API key or a token stored Base64-encoded in a config file is stored in plain text with an extra step. The encoding of the credentials in HTTP Basic authentication is Base64 precisely because it is meant to be reversible; the confidentiality there comes from TLS, not from the encoding.

The standard alphabet ends with + and /, both of which mean something else in a URL: a plus is decoded as a space in query strings, and a slash is a path separator. Padding with = causes its own trouble in query parameters. RFC 4648 therefore defines a URL-safe variant using - and _ with padding omitted, and that is what JSON Web Tokens use for every one of their three segments.

Decoding is where the two variants meet. A decoder expecting the standard alphabet will fail or produce nonsense on URL-safe input, which is a common cause of "invalid Base64" errors in code that looks correct. This tool restores the substituted characters and re-adds missing padding when the URL-safe box is ticked, so both forms decode cleanly.

Frequently Asked Questions

No. It is a reversible encoding with no key and no secret. Anyone who has the string can decode it instantly, so it must never be used to protect passwords, tokens or personal data.
Every three bytes become four characters, so the output grows by roughly 33% plus padding. That overhead is the price of expressing arbitrary bytes using only text-safe characters.
Yes. The text is converted to UTF-8 bytes before encoding and decoded back the same way, so ä, é, 中文 and emoji all survive a round trip intact.
Whenever the value goes into a URL path, query string or cookie. It replaces + and / with - and _ and drops the = padding, all of which would otherwise be misread. JSON Web Tokens use this variant.
Usually one of three reasons: it is URL-safe input decoded as standard, padding was stripped, or a line break or space was pasted in. This tool strips whitespace and restores padding automatically.