Developer Tools

Base64 Encoder & Decoder Online Free

Free online Base64 encoder and decoder. Convert text to Base64 and back instantly in your browser. Supports Unicode characters. No data uploaded.

What is Base64 Encoder?

Base64 is a binary-to-text encoding scheme that converts binary data into a text format using 64 printable ASCII characters (A-Z, a-z, 0-9, +, and /). This Base64 Encoder & Decoder tool lets you instantly convert text to Base64 encoding and decode Base64 strings back to readable text. Base64 is used billions of times daily across the internet — every email with an attachment uses it, every Basic Auth header contains it, and millions of websites embed small images as Base64 data URIs.

The encoding process takes every 3 bytes (24 bits) of input and splits them into four 6-bit groups, mapping each group to one of the 64 characters in the Base64 alphabet. If the input length is not a multiple of 3, padding characters (=) are added to the output. This means a 100-byte input always produces exactly 136 characters of Base64 output — a predictable 33% size increase.

This tool processes everything in your browser using JavaScript's built-in btoa() and atob() functions with UTF-8 encoding support. No data is ever sent to a server, making it safe for encoding API keys, authentication tokens, and other sensitive strings. It handles full Unicode including emoji, Chinese characters, Arabic text, and any valid UTF-8 content.

How Base64 Encoder Works

Base64 encoding is defined in RFC 4648 and uses a 64-character alphabet: uppercase A-Z (values 0-25), lowercase a-z (26-51), digits 0-9 (52-61), plus (+, value 62), and slash (/, value 63). The equals sign (=) is used for padding. The encoding process works in three steps: first, the input bytes are concatenated into a continuous bit stream. Next, the stream is divided into 6-bit groups (since 2^6 = 64, each group maps to exactly one character). Finally, any remaining bits are zero-padded and a trailing = or == is added to signal the padding.

For example, the text 'Hi' has two bytes: 0x48 (72) and 0x69 (105). In binary that is 01001000 01101001. Grouped into 6-bit chunks: 010010 000110 1001xx. The third group is padded with two zero bits to become 100100. These map to characters S, G, and k, with one = padding character, producing 'SGk='.

There is also a URL-safe variant (Base64url) defined in the same RFC, which replaces + with - and / with _ to avoid conflicts with URL encoding. This variant is used in JWTs (JSON Web Tokens), OAuth tokens, and anywhere Base64 appears in URLs or filenames. The padding = can optionally be omitted in URL-safe contexts since the decoder can infer the original length.

Common Use Cases

  • Encoding email attachments using MIME — every email client uses Base64 to embed binary files like PDFs, images, and documents into the text-only SMTP protocol.
  • Creating data URIs to embed small images directly in HTML or CSS (e.g., data:image/png;base64,...) to eliminate extra HTTP requests for icons and sprites.
  • Encoding API authentication credentials for HTTP Basic Auth headers, which require the username:password string to be Base64-encoded.
  • Embedding binary data in JSON or XML payloads where raw bytes would break the text-based format, commonly used in webhook integrations and API requests.
  • Decoding JWTs (JSON Web Tokens) where the header and payload sections are Base64url-encoded strings that need decoding to inspect claims and expiration.
  • Storing small binary blobs in configuration files, environment variables, or database text columns where binary storage is not available.

How to Use

  1. 1Select 'Encode' to convert text to Base64, or 'Decode' to convert Base64 back to text.
  2. 2Type or paste your input in the left area.
  3. 3The result appears instantly on the right. Click 'Copy' to copy it.

Features

  • Instant encoding and decoding with real-time output
  • Full Unicode support — handles emoji, Chinese, Arabic, and all UTF-8 text
  • Switch between encode and decode modes with one click
  • Copy output to clipboard instantly
  • 100% client-side — your data never leaves your browser
  • No file size limits beyond your browser's memory

Tips & Best Practices

  • 💡Base64 is encoding, not encryption. Anyone can decode Base64 without a key — never use it to protect passwords, API secrets, or sensitive data. Use AES encryption or similar for security.
  • 💡If your Base64 string will appear in a URL, query parameter, or filename, use the URL-safe variant: replace + with -, / with _, and optionally remove the = padding. Many languages have a built-in URL-safe Base64 option.
  • 💡Remember the 33% size overhead: a 1MB file becomes 1.33MB when Base64-encoded. For large files, this overhead makes Base64 impractical — use direct binary transfer instead.
  • 💡When encoding text (not binary), ensure your input is UTF-8 encoded. JavaScript's btoa() function only handles Latin-1 characters natively; this tool handles the UTF-8 conversion automatically, but custom implementations need explicit encoding.
  • 💡To quickly check if a string is Base64-encoded, look for the character set: only A-Z, a-z, 0-9, +, /, and trailing = characters. The length should be a multiple of 4. Any other characters indicate it is not standard Base64.

Frequently Asked Questions

Is Base64 the same as encryption?
No. Base64 is an encoding scheme, not encryption. Anyone can decode Base64 text without a key. It is designed for data transport, not security. Never use Base64 to protect sensitive data.
Why is the Base64 output larger than the input?
Base64 encoding increases data size by approximately 33%. Every 3 bytes of input become 4 characters of Base64 output. This overhead is the trade-off for representing binary data as text.
What is Base64 used for?
Common uses include email attachments (MIME encoding), embedding images in HTML/CSS (data URIs), encoding authentication tokens (Basic Auth headers), and storing binary data in JSON or XML formats.
Does this tool support URL-safe Base64?
This tool uses standard Base64 encoding. URL-safe Base64 replaces + with - and / with _ to avoid URL encoding issues. You can manually replace these characters in the output if needed.

Related Tools