Base64 是一种编码方法,用于将二进制数据(如图像、音频、文件等)编码为 ASCII 字符串。这种编码方式将数据转换为一组可打印字符,通常用于在需要文本数据的环境中传输二进制数据,例如在电子邮件、JSON 数据、XML 数据等场景中。Base64 编码原理如下:
1. 编码过程
1.1 数据分组
- Base64 编码将输入数据按每 3 个字节(24 位)一组进行分组。
- 每个 3 字节的数据块由 24 位二进制数据组成,相当于 3 * 8 = 24 位。
1.2 分割与映射
1.3 填充
- 如果输入数据的字节数不是 3 的倍数,Base64 编码会在编码的结果末尾添加
= 作为填充符号,以保证编码后的字符数是 4 的倍数。
= 表示填充的字节数:
- 一个
= 表示编码过程中缺少 1 个字节。
- 两个
= 表示编码过程中缺少 2 个字节。
2. 解码过程
解码过程是编码过程的反向操作:
2.1 反向映射
- 将 Base64 字符串中的每个字符映射回 6 位的二进制数据。
- 使用 Base64 字符集的索引将字符转换为 6 位的二进制数。
2.2 合并与分组
- 将所有 6 位的二进制数据重新组合为 24 位的二进制数据块。
- 将 24 位数据块拆分为 3 个字节(24 位 / 8 位 = 3 字节)。
2.3 去除填充
- 移除解码过程中添加的填充符号
=,恢复原始数据的字节。
示例
编码示例
将字符串 "hello" 编码为 Base64:
转换为二进制:
分组:
- 24 位块 1:
01101000 01100101 01101100(011010、000110、010101、101100)
- 24 位块 2:
01101100 01101111(011011、000110、111100)
映射到 Base64 字符集:
011010 -> a
000110 -> G
010101 -> V
101100 -> s
011011 -> b
000110 -> G
111100 -> 8
Base64 编码结果为 aGVsbG8=
解码示例
将 Base64 字符串 aGVsbG8= 解码:
映射回二进制:
a -> 011010
G -> 000110
V -> 010101
s -> 101100
b -> 011011
G -> 000110
8 -> 111100
合并和恢复:
- 合并为:
01101000 01100101 01101100 01101100 01101111
转换为原始字符串:
01101000 -> h
01100101 -> e
01101100 -> l
01101100 -> l
01101111 -> o
原始字符串为 "hello"