概念
将⼆进制数据转换成由64个字符组成的字符串的编码算法。
⼆进制数据
- ⼴义:所有计算机数据都是⼆进制数据
- 狭义:⾮⽂本数据即⼆进制数据
算法
将原数据每6位对应成 Base64 索引表中的⼀个字符编排成⼀个字符串(每个字符8位)。
Base64 索引表:
编码示例:把“Man”进行 Base64 编码:
编码示例:Base64 的末尾补足:
用途
- 将二进制数据扩充了储存和传输途径,让原数据具有字符串所具有的特性,例如可以把数据保存到文本文件、可以通过聊天对话框或短信形式发送二进制数据、可以在URL中加入简单的二进制数据;
- 普通的字符串在经过 Base64 编码后的结果会变得肉眼不可读,因此可以适用于一定条件下的防偷窥(较少用)。
缺点
因为自身的原理(6位变8位),因此每次 Base64 编码之后,数据都会増大约1/3,所以会影响存储和传输性能。
1 | 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