Base64编码流程
1. Base64简介
Base64 是一种 编码方式 ,常用于传输 8bit(一字节) 字节码。
计算机中所有的数据都是以 0 和 1 的二进制来存储,而所有的文字都是通过 ascii 表转化而来进而显示成对应的语言。但是 ascii 表中存在许多不可见字符,这些不可见字符在数据传输时,有可能经过不同硬件上各种类型的路由,在转义时容易发生错误。所以规定了 64 个可见字符(a-z、A-Z、0-9、+、/),通过 base64 转码之后,所有的二进制数据都是使用这 64 个可见字符来表示,传输的时候就不会因为不可见字符转义错误的情况;
2. Base64编码流程
- 取原数据
将原数据按照 3 个字节取为一组,即为 3x8=24 位
- 分组
将 3x8=24 的数据分为 4x6=24 的数据,也就是分为了 4 组;之所以按 6 位进行分组,是因为 6 个比特位的取值范围是 0~63,正好表示可以表示 Base64 中的 64 个可见符号;
- 高位补0
将 4 个组中的数据分别在高位补上 2 个 0 ,也就成了 8x4=32,所以原数据增大了三分之一。
- 补位
如果要编码的二进制数据不是 3 的倍数,最后会剩下 1 个或 2 个字节怎么办,Base64 会在末尾补足 0 后,再在编码的末尾加上 1 个或 2 个 =
号,表示补了多少个编码,解码的时候,会自动去掉;
- 转码
根据 base64 编码表对数据进行转换;
为什么需要高位补 0:
因为 base64 产生的基础是避免在传输 8 Bit 字节码数据时,不可见字符的可能产生的一些错误。因为字符是以 8 位为一个字节来处理,补零只是为了方便当前的处理规则,如果是 6 位,那么又需要做适配或者更改当前的处理规则;
3. 举个栗子🌰
举个栗子:Man最后的结果就是TWFu。
Base 64编码流程步骤:
- M-a-n 在 Ascii 表中分为为 77-97-110,其对应的二进制位如上图所示;
- 将 3 * 8 个二进制分组为 4 * 6 个组;
- 在 4 个组的二进制位的高位补 0,不会对实际数值产生影响;
- 转码:查询19-22-5-46 对应的字符为:TWFu;
Base64编码表如图所示:
Base64编码表4. 补位的例子
如果要编码的字符不是 3 的倍数,那么就需要补位,同理,以 Ma 和 M 为例,分别演示补位 1 个和两个的情况:
Ma 的 Base64 流程:
Ma编码流程如上图所示,最后补足了两个 0 ,查询编码表后得到 Ma 的编码为:TWE
;
但是 Base64 编码之后都是 4 的倍数,比如上一个例子中的 Man
编码之后得到的是 4 个 Base64 字符,所以这里 TWE
要补一个 =
,在解码的时候会直接去掉。
最终 Ma
的 Base64 编码为:TWE=
;
使用 Base64 编码工具验证:
Base64同理,如果只对 M
编码,则流程为:
如上最终得到 M
的编码为:TQ
,补足到 4 位,得到最终结果:TQ==
;
总结:Base64 编码的结果中,最多存在两个 =
;