🛠️DevTools

What is Base64 Encoding?

Base64 is a binary-to-text encoding scheme that converts binary data into a string of ASCII characters. It's widely used in web development, email systems, and data storage to safely transmit binary data over text-based protocols.

Try Base64 Encoder & Decoder Tool →

How Base64 Works

Base64 encoding works by taking binary data and converting it into a set of 64 printable ASCII characters. Here's how it works:

  1. Take the input data - This can be text, an image, or any binary data
  2. Convert to binary - Each byte becomes 8 bits
  3. Group into 6-bit chunks - The bits are regrouped into 6-bit segments
  4. Map to characters - Each 6-bit value (0-63) maps to a character from the Base64 alphabet

The Base64 alphabet consists of:

  • A-Z (26 characters)
  • a-z (26 characters)
  • 0-9 (10 characters)
  • + and / (2 characters)
  • = (padding character)

Why Use Base64?

Base64 encoding is used in many scenarios:

1. Email Attachments

Email protocols (SMTP) were designed for text. Base64 allows binary files to be sent as text.

2. Data URLs

Embed images directly in HTML/CSS without separate files:

html
<img src="data:image/png;base64,iVBORw0KGgo..." />

3. API Data Transfer

Safely include binary data in JSON payloads.

4. Basic Authentication

HTTP Basic Auth encodes credentials in Base64 (though this is NOT encryption).

5. Storing Binary in Text Fields

Some databases only support text. Base64 lets you store binary data.

Base64 in JavaScript

JavaScript provides built-in functions for Base64 encoding and decoding:

javascript
// Encode to Base64
const text = "Hello, World!";
const encoded = btoa(text);
console.log(encoded); // "SGVsbG8sIFdvcmxkIQ=="

// Decode from Base64
const decoded = atob(encoded);
console.log(decoded); // "Hello, World!"

// For Unicode text, use this approach:
function encodeUnicode(str) {
  return btoa(encodeURIComponent(str).replace(/%([0-9A-F]{2})/g,
    (match, p1) => String.fromCharCode('0x' + p1)));
}

function decodeUnicode(str) {
  return decodeURIComponent(atob(str).split('').map(c =>
    '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2)).join(''));
}

Base64 in Python

Python's base64 module makes encoding and decoding simple:

python
import base64

# Encode to Base64
text = "Hello, World!"
encoded = base64.b64encode(text.encode()).decode()
print(encoded)  # "SGVsbG8sIFdvcmxkIQ=="

# Decode from Base64
decoded = base64.b64decode(encoded).decode()
print(decoded)  # "Hello, World!"

# Encode a file
with open("image.png", "rb") as f:
    encoded = base64.b64encode(f.read()).decode()

# URL-safe Base64 (replaces + with - and / with _)
url_safe = base64.urlsafe_b64encode(text.encode()).decode()

Base64 in Other Languages

Here's how to use Base64 in other popular languages:

Bash:

bash
echo -n "Hello, World!" | base64
echo "SGVsbG8sIFdvcmxkIQ==" | base64 --decode

Go:

go
encoded := base64.StdEncoding.EncodeToString([]byte("Hello"))
decoded, _ := base64.StdEncoding.DecodeString(encoded)

Java:

java
String encoded = Base64.getEncoder().encodeToString("Hello".getBytes());
byte[] decoded = Base64.getDecoder().decode(encoded);

Base64 is NOT Encryption

Important: Base64 is encoding, not encryption.

  • Not secure - Anyone can decode Base64
  • Not for passwords - Never use Base64 to "protect" sensitive data
  • Not obfuscation - It's trivially reversible

Base64 is designed for data transport, not security. If you need to protect data, use proper encryption like AES.

Base64 Padding Explained

You may have noticed Base64 strings sometimes end with = or ==. This is padding.

Base64 works in groups of 3 bytes (24 bits) → 4 characters. If the input isn't divisible by 3:

  • 1 byte remaining → Add == padding
  • 2 bytes remaining → Add = padding
  • 0 bytes remaining → No padding

Example:

  • "A" (1 byte) → "QQ=="
  • "AB" (2 bytes) → "QUI="
  • "ABC" (3 bytes) → "QUJD"

Some systems use URL-safe Base64 which omits padding.

URL-Safe Base64

Standard Base64 uses + and / which have special meaning in URLs. URL-safe Base64 replaces:

  • +- (minus)
  • /_ (underscore)

This is commonly used in:

  • JWT tokens
  • URL parameters
  • Filenames

Most languages have built-in support:

python
import base64
base64.urlsafe_b64encode(data)

Frequently Asked Questions

What is Base64 encoding used for?

Base64 is used to encode binary data as text for safe transmission over text-based protocols. Common uses include email attachments, data URLs in HTML/CSS, API payloads, and storing binary data in databases.

Is Base64 encoding secure?

No, Base64 is NOT secure. It's encoding, not encryption. Anyone can decode Base64 data instantly. Never use Base64 to protect sensitive information like passwords.

Why does Base64 end with = signs?

The = signs are padding characters. Base64 encodes data in groups of 3 bytes. If the input length isn't divisible by 3, padding is added: one = for 2 remaining bytes, two == for 1 remaining byte.

What is the difference between Base64 and encryption?

Base64 is reversible encoding that anyone can decode. Encryption uses a secret key to protect data so only authorized parties can read it. Use encryption (like AES) for security, Base64 for data transport.

Does Base64 increase file size?

Yes, Base64 increases size by approximately 33%. Three bytes of binary data become four Base64 characters. This overhead is the tradeoff for text compatibility.

Try the Base64 Encoder & Decoder Tool

Now that you understand how it works, try encoding and decoding with our free online tool.

Open Base64 Encoder & Decoder

Last updated: 2026-03-14