Base 64 Encoding 的编码原理是将每三个字节(byte)转换为四个字符,每个字符占 6 bit。

base64-1

6 bit 一共有 64 种组合方式,也就是说该编码共需要使用至少64种字符(后面我们还会介绍一个特殊字符 =)。

Base 64 Encoding 使用了从 A 到 Z、a 到 z、0 到 9、以及 + 和 / 这些字符(即[A-Za-z0-9+/])。

base64-2

假设我们有三个字节的数据,byte[] {1, 2, 3},用二进制表示为:

1
00000001 | 00000010 | 00000011

依据上面的原理,使用 Basee 64 Encoding 编码后结果应该为:

1
000000 | 010000 | 001000 | 000011

转换为十进制为 0 | 16 | 8 | 3,对照上面的表,编码后的文本为 AQID 。

既然 Base 64 Encoding 将每三个字节转换为四个字符,那如果一幅图片的字节数不能被 3 整除该怎么办?

如果剩余一个字节,该字节同样被转换为四个字符。第一个 6 bit 转换成一个字符,接下来 2 bit 转换成一个字符(注意这里是向右添加0),最后添加两个=字符。

base64-3

假设我们有四个字节的数据,byte[] {1, 2, 3, 4},用二进制表示为:

1
00000001 | 00000010 | 00000011 | 00000100

依据上面的原理,使用 Basee 64 Encoding 编码后结果应该为:

1
000000 | 010000 | 001000 | 000011 | 000001 | 000000

转换为十进制为 0 | 16 | 8 | 3 | 1 | 0,对照上面的表,编码后的文本为 AQIDBA==

如果不能被 3 整除,而余下两个字节,编码方式类似剩余一个字节,同样是转换成四个字符,最后一个字符用=。

base64-4

假设我们有五个字节的数据,byte[] {1, 2, 3, 4, 5},用二进制表示为:

1
00000001 | 00000010 | 00000011 | 00000100 | 00000101

依据上面的原理,使用 Basee 64 Encoding 编码后结果应该为:

1
000000 | 010000 | 001000 | 000011 | 000001 | 000000 | 010100

转换为十进制为 0 | 16 | 8 | 3 | 1 | 0 | 20,对照上面的表,编码后的文本为 AQIDBAU=

—EOF—