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"