ArthurWangCN / notepad

reading notepad
0 stars 2 forks source link

base64 的原理及优缺点 #51

Open ArthurWangCN opened 2 years ago

ArthurWangCN commented 2 years ago

1.什么是 Base64 Base64 是一种基于 64 个可打印字符来表示二进制数据的编码方式,是从二进制数据到字符的过程。 原则上,计算机中所有内容都是二进制形式存储的,所以所有内容(包括文本、影音、图片等)都可以用 base64 来表示。

2.适用场景

  1. Base64 一般用于在 HTTP 协议下传输二进制数据,由于 HTTP 协议是文本协议,所以在 HTTP 写一下传输二进制数 据需要将二进制数据转化为字符数据,网络传输只能传输可打印字符,在 ASCII 码中规定,0-31、128 这 33 个字符属于控制字符, 32~127 这 95 个字符属于可打印字符,那么其它字符怎么传输呢,Base64 就是其中一种方式,
  2. 将图片等资源文件以 Base64 编码形式直接放于代码中,使用的时候反 Base64 后转换成 Image 对象使用。
  3. 偶尔需要用这条纯文本通道传一张图片之类的情况发生的时候,就会用到 Base64,比如多功能 Internet 邮件扩充服务(MIME)就是用 Base64 对邮件的附件进行编码的。

3.Base64 编码原理 Base64 编码之所以称为 Base64,是因为其使用 64 个字符来对任意数据进行编码,同理有 Base32、Base16 编码。标准 Base64 编码使用的 64 个字符为:有点特殊的是最后两个字符,因对最后两个字符的选择不同,Base64 编码又有很多变种,比如用于编码 URL 的Base64 URL 编码。

Base64 编码本质上是一种将二进制数据转成文本数据的方案。对于非二进制数据,是先将其转换成二进制形式,然后每连续 6 比特(2 的 6 次方=64)计算其十进制值,根据该值在上面的索引表中找到对应的字符,最终得到一个文本字符串。

假设我们要对 Hello! 进行 Base64 编码,按照 ASCII 表,其转换过程如下图所示:可知 Hello! 的 Base64 编码结果为 SGVsbG8h,每 3 个原始字符经 Base64 编码成 4 个字符。那么,当原始字符串长度不能被 3 整除时,怎么办呢? 以 Hello!! 为例,其转换过程为: Hello!! Base64 编码的结果为 SGVsbG8hIQAA。可见,不能被 3 整除时会采用来来补 0 的方式来完成编码。 需要注意的是:标准 Base64 编码通常用 = 字符来替换最后的 A,即编码结果为 SGVsbG8hIQ==。因为 = 字符并不在 Base64 编码索引表中,其意义在于结束符号,在 Base64 解码时遇到 = 时即可知道一个 Base64 编码字符串结束。

4.优缺点 优点:可以将二进制数据转化为可打印字符,方便传输数据,对数据进行简单的加密,肉眼安全。 缺点:内容编 码后体积变大,编码和解码需要额外工作量。