Base64编码流程

2021-11-12  本文已影响0人  康小曹

1. Base64简介

Base64 是一种 编码方式 ,常用于传输 8bit(一字节) 字节码。

计算机中所有的数据都是以 0 和 1 的二进制来存储,而所有的文字都是通过 ascii 表转化而来进而显示成对应的语言。但是 ascii 表中存在许多不可见字符,这些不可见字符在数据传输时,有可能经过不同硬件上各种类型的路由,在转义时容易发生错误。所以规定了 64 个可见字符(a-z、A-Z、0-9、+、/),通过 base64 转码之后,所有的二进制数据都是使用这 64 个可见字符来表示,传输的时候就不会因为不可见字符转义错误的情况;

2. Base64编码流程

  1. 取原数据

将原数据按照 3 个字节取为一组,即为 3x8=24 位

  1. 分组

将 3x8=24 的数据分为 4x6=24 的数据,也就是分为了 4 组;之所以按 6 位进行分组,是因为 6 个比特位的取值范围是 0~63,正好表示可以表示 Base64 中的 64 个可见符号;

  1. 高位补0

将 4 个组中的数据分别在高位补上 2 个 0 ,也就成了 8x4=32,所以原数据增大了三分之一

  1. 补位

如果要编码的二进制数据不是 3 的倍数,最后会剩下 1 个或 2 个字节怎么办,Base64 会在末尾补足 0 后,再在编码的末尾加上 1 个或 2 个 = 号,表示补了多少个编码,解码的时候,会自动去掉;

  1. 转码

根据 base64 编码表对数据进行转换;

为什么需要高位补 0:

因为 base64 产生的基础是避免在传输 8 Bit 字节码数据时,不可见字符的可能产生的一些错误。因为字符是以 8 位为一个字节来处理,补零只是为了方便当前的处理规则,如果是 6 位,那么又需要做适配或者更改当前的处理规则;

3. 举个栗子🌰

举个栗子:Man最后的结果就是TWFu。

Base 64编码流程

步骤:

  1. M-a-n 在 Ascii 表中分为为 77-97-110,其对应的二进制位如上图所示;
  2. 将 3 * 8 个二进制分组为 4 * 6 个组;
  3. 在 4 个组的二进制位的高位补 0,不会对实际数值产生影响;
  4. 转码:查询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编码流程

如上最终得到 M 的编码为:TQ,补足到 4 位,得到最终结果:TQ==

总结:Base64 编码的结果中,最多存在两个 =

上一篇下一篇

猜你喜欢

热点阅读