[关闭]
@qidiandasheng 2020-11-28T09:53:48.000000Z 字数 2056 阅读 733

Base64编码(😁)

密码学


什么是Base64?

Base64是一种基于64个可打印字符来表示二进制数据的表示方法。

就是说选出64个字符----小写字母a-z、大写字母A-Z、数字0-9、符号"+"、"/"(再加上作为垫字的"=",实际上是65个字符)----作为一个基本字符集。然后,其他所有符号都转换成这个字符集中的字符。

693b73ca83f24d7bbbb7aa388bef2ba9_tplv-k3u1fbpfcp-watermark.png-83.6kB

转换步骤

示例一

Text content M a n
ASCII 77 97 110
Bit pattern 01001101 01100001 01101110

二个字节的情况

将这二个字节的一共16个二进制位,按照上面的规则,转成三组,最后一组除了前面加两个0以外,后面也要加两个0。这样得到一个三位的Base64编码,再在末尾补上一个"="号。

比如,"Ma"这个字符串是两个字节,可以转化成三组00010011、00010110、00000100以后,对应Base64值分别为T、W、E,再补上一个"="号,因此"Ma"的Base64编码就是TWE=。

一个字节的情况

将这一个字节的8个二进制位,按照上面的规则转成二组,最后一组除了前面加二个0以外,后面再加4个0。这样得到一个二位的Base64编码,再在末尾补上两个"="号。

比如,"M"这个字母是一个字节,可以转化为二组00010011、00010000,对应的Base64值分别为T、Q,再补上二个"="号,因此"M"的Base64编码就是TQ==。

示例二

以下这张是网上找的图片,转换过程看起来更直观一点:

4010043-f8f9f1b724462be5.jpg-93kB

为什么使用Base64?

Base64最早就是用于邮件传输协议中的,原因是邮件传输协议只支持ASCII字符传递,如果要传输二进制文件,如:图片、视频是无法实现的。因此采用Base64将二进制文件内容编码为只包含ASCII字符的内容。

我们知道在计算机中任何数据都是按ASCII码存储的,而ASCII码的128~255之间的值是不可见字符。而在网络上交换数据时,比如说从A地传到B地,往往要经过多个路由设备,由于不同的设备对字符的处理方式有一些不同,这样那些不可见字符就有可能被处理错误,这是不利于传输的。

Base64能够将任何数据转换为易移植的字符串,避免了传输过程中失真问题。最初,Base64是为了解决电子邮件中无法直接使用非ASCII字符的问题。一段数据先经过Base64编码统统变成可见字符,转为ASCII字符串后,可以在接收端,通过Base64解码还原为原数据后,而无需担心传输过程中失真。

跨系统的行尾编码的差异意味着ASCII字符10(换行)和13(回车)有时也会被修改。比如我想发一条有两行文字的短信:

  1. Hello,
  2. world!

直接转换为ASCII发送(字节10在某些系统中已损坏):

  1. 72 101 108 108 111 44 10 119 111 114 108 100 33

通过base64编码后转为ASCII发送:

  1. SGVsbG8sCndvcmxkIQ==
  1. 83 71 86 115 98 71 56 115 67 110 100 118 99 109 120 107 73 61 61

使用场景

参考

Base64笔记
iOS中Base64编解码的使用

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注