Base64 Encoding - The Basics
Base64 encoding is a method for converting binary data into a text format using a specific set of 64 characters. This encoding technique is particularly useful for transmitting binary data over media that are designed to handle textual data, such as email or XML. Base64 is commonly used in a variety of applications, including data transfer in HTTP headers, embedding image data in HTML or CSS, and encoding credentials in HTTP Basic Authentication.
How Base64 Encoding Works
1. Binary Data to ASCII Characters:
- Base64 encoding converts binary data into ASCII text using a set of 64 characters: A-Z
, a-z
, 0-9
, +
, and /
.
- Each group of three bytes (24 bits) of binary data is split into four groups of six bits. Each six-bit group is then mapped to one of the 64 characters.
2. Padding:
- If the number of bytes to encode is not a multiple of three, the result will be padded with one or two =
characters to make the length a multiple of four. This padding indicates that the last one or two characters are padding and should be ignored when decoding.
Base64 Encoding Process
1. Convert Input Data to Binary:
- For example, the ASCII string "Man" is represented in binary as:
M: 01001101 a: 01100001 n: 01101110
2. Divide the Binary Data into 6-bit Groups:
- Combine the three 8-bit bytes into one 24-bit group and then divide it into four 6-bit groups:
010011 010110 000101 101110
3. Map the 6-bit Groups to Base64 Characters:
- Using the Base64 index table, map each 6-bit group to the corresponding Base64 character:
010011 (19): T 010110 (22): W 000101 (5): F 101110 (46): u
- The encoded string for "Man" is "TWFu".
Example
Let's encode the string "hello" using Base64:
1. Convert to Binary:
h: 01101000 e: 01100101 l: 01101100 l: 01101100 o: 01101111
2. Group into 6-bit Chunks:
011010 000110 010101 101100 011011 000110 1111
3. Pad the Data:
- The binary data is padded with two zero bits to make the last group 6 bits long:
011010 000110 010101 101100 011011 000110 111100
4. Map to Base64 Characters:
011010 (26): a 000110 (6): G 010101 (21): V 101100 (44): s 011011 (27): b 000110 (6): G 111100 (60): 8
- The encoded string for "hello" is "aGVsbG8=".
Base64 Alphabet Table
+---------+--------+---------+--------+---------+--------+---------+--------+
| Value | Char | Value | Char | Value | Char | Value | Char |
+---------+--------+---------+--------+---------+--------+---------+--------+
| ------- | ------ | ------- | ------ | ------- | ------ | ------- | ------ |
| 0 | A | 16 | Q | 32 | g | 48 | w |
| 1 | B | 17 | R | 33 | h | 49 | x |
| 2 | C | 18 | S | 34 | i | 50 | y |
| 3 | D | 19 | T | 35 | j | 51 | z |
| 4 | E | 20 | U | 36 | k | 52 | 0 |
| 5 | F | 21 | V | 37 | l | 53 | 1 |
| 6 | G | 22 | W | 38 | m | 54 | 2 |
| 7 | H | 23 | X | 39 | n | 55 | 3 |
| 8 | I | 24 | Y | 40 | o | 56 | 4 |
| 9 | J | 25 | Z | 41 | p | 57 | 5 |
| 10 | K | 26 | a | 42 | q | 58 | 6 |
| 11 | L | 27 | b | 43 | r | 59 | 7 |
| 12 | M | 28 | c | 44 | s | 60 | 8 |
| 13 | N | 29 | d | 45 | t | 61 | 9 |
| 14 | O | 30 | e | 46 | u | 62 | + |
| 15 | P | 31 | f | 47 | v | 63 | / |
+---------+--------+---------+--------+---------+--------+---------+--------+
Applications of Base64 Encoding
1. Email Attachments: Used in MIME (Multipurpose Internet Mail Extensions) to encode binary files (e.g., images) as text.
2. Data URIs: Embed images or other media directly into HTML or CSS files.
3. HTTP Authentication: Encode credentials in HTTP Basic Authentication headers.
4. Cryptography: Encode binary data output from encryption algorithms in a textual form.
Decoding Base64
To decode a Base64 encoded string, the process is reversed:
1. Replace each Base64 character with its 6-bit binary representation. 2. Group the bits into 8-bit bytes. 3. Convert the bytes back to the original binary data.
Example in Python
Here's a simple example of encoding and decoding using Python:
import base64
# Encode
original_data = b"hello"
encoded_data = base64.b64encode(original_data)
print(encoded_data) # Output: b'aGVsbG8='
# Decode
decoded_data = base64.b64decode(encoded_data)
print(decoded_data) # Output: b'hello'
In summary, Base64 encoding is a versatile and widely-used method for converting binary data into a text format, making it suitable for various applications where binary data needs to be handled as text.
Subscribe to my newsletter
Read articles from Cloud Tuned directly inside your inbox. Subscribe to the newsletter, and don't miss out.
Written by