Base64 is everywhere in web development โ data URLs, email attachments, Basic Auth headers, JWTs โ yet many developers treat it as a black box. Understanding what it actually does (and what it does not do) will help you use it correctly and avoid common mistakes. Try any string in our Base64 Encoder as you read along.
What Base64 actually does
Base64 is a binary-to-text encoding. It takes arbitrary bytes and represents them using 64 safe ASCII characters: AโZ, aโz, 0โ9, +, and /, with = for padding. The goal is to move binary data safely through systems that only reliably handle text.
How the math works
Base64 processes input in groups of 3 bytes (24 bits). Those 24 bits are split into four 6-bit chunks, and each chunk maps to one of the 64 characters. Because 3 bytes become 4 characters, the output is always about 33% larger than the input.
Input: "Man" (3 bytes = 24 bits) Bits: 010011010110000101101110 Split: 010011 010110 000101 101110 Base64: T W F u โ "TWFu"
Common use cases
- Data URLs: embed small images or fonts directly in HTML/CSS.
- Email (MIME): attach binary files to text-based email.
- Basic Auth: encode
user:passwordin the Authorization header. - JWTs: the header and payload are Base64URL-encoded.
Base64 is not encryption
This is the most important point. Base64 provides zeroconfidentiality โ it is trivially reversible by anyone. Never use it to "hide" passwords or secrets. A Basic Auth header, for example, is only safe because it travels over HTTPS, not because it is Base64-encoded.
Base64 vs Base64URL
Standard Base64 uses + and /, which have special meaning in URLs. The URL-safe variant replaces them with - and _ and usually drops padding. This is the variant used in JWTs and query strings.
When not to use Base64
- For large assets โ the 33% size increase hurts performance; serve real files instead.
- For caching โ inlined Base64 cannot be cached separately by the browser.
- For security โ it is encoding, never protection.
Frequently asked questions
Why is there a = at the end of some Base64 strings?
The = is padding. When the input length is not a multiple of 3, one or two = characters are added so the output length is a multiple of 4.
Does Base64 work with Unicode text?
Yes, but you must first encode the text to bytes (typically UTF-8) before Base64-encoding. In the browser, encodeURIComponent + btoa or TextEncoder handles this correctly.