Base64

概念

       将⼆进制数据转换成由64个字符组成的字符串的编码算法。

⼆进制数据

  • ⼴义:所有计算机数据都是⼆进制数据
  • 狭义:⾮⽂本数据即⼆进制数据

算法

       将原数据每6位对应成 Base64 索引表中的⼀个字符编排成⼀个字符串(每个字符8位)。

       Base64 索引表:

Base64 索引表

       编码示例:把“Man”进行 Base64 编码:

Base64 编码

       编码示例:Base64 的末尾补足:

Base64 的末尾补足

用途

  1. 将二进制数据扩充了储存和传输途径,让原数据具有字符串所具有的特性,例如可以把数据保存到文本文件、可以通过聊天对话框或短信形式发送二进制数据、可以在URL中加入简单的二进制数据;
  2. 普通的字符串在经过 Base64 编码后的结果会变得肉眼不可读,因此可以适用于一定条件下的防偷窥(较少用)。

缺点

       因为自身的原理(6位变8位),因此每次 Base64 编码之后,数据都会増大约1/3,所以会影响存储和传输性能。

1
2
3
Base64加密图片传输更安全和高效?
不。首先,Base64 并不是加密;另外,Base64 会导致数据增大1/3,降低网络性能,增大用户流量开销,是画蛇添足的手段。
Base64 对图片进行编码的用途在于,有时需要使用文本形式来传输图片。除此之外,完全没必要使用 Base64 对图片进行额外处理。

Base58 变种

       比特币使用的编码方式,去掉了 Base64 中的数字“0”,字母大写“O”,字母大写”I”和字母小写“l”,以及“+”和“/”等符号,用于比特币地址的表示。

       Base58 对于 Base64 的改动,主要目的在于用户的便捷性。由于去掉了难以区分的字符,使得 Base58 对于“人工抄写”更加方便。另外,去掉了“+”和“/”后也让大多数的软件可以方便双击选取。

URL 使⽤的百分号编码

       在 URL 的字符串中,对一些不用于特殊用途的保留字符,使用百分号“%”为前缀进行单独编码,以避免出现解析错误。

       例如,要在 http://encoder.com/user 后面添加查询字符串,查询 name 为“隐匿&伟大”的用户,如果直接写成 http://encoder.com/user/?name=隐匿&伟大 ,“&”符号就会被解析为分隔符号,即“name=隐匿”和“伟大”分别为一个查询,因此需要对它进行转码,转码后的 URL 为 http://encoder.com/user/?name=隐匿%26伟大 。“%26”即为“&”保留字符的表达,“/”和“+”也是保留字符。这种编码仅用于URL,目的是避免解析错误的出现。

参考资料:
腾讯课堂 HenCoder

Fork me on GitHub