起初是在爬虫时,处理登录密码加密的时候遇到的,需要base64编码(为了解决乱码),这是在密码学的知识点,用于加密后编码表找不到对应字符, 出现乱码。
一、定义
Base64是一种二进制到文本的编码方式。
Base64使用到的64个字符:
A-Z
26个a-z
26个0-9
10个+
1个/
1个
下图是Base64码表,
计算机传输的基本单位
这里科普一下计算机单位的知识:
在GDK、utf-8以及大多数计算机系统中,一个字节(byte)由8位二进制数组成
一个字符由1到4个字节组成(utf-8)
一个字节由8位二进制数组成(utf-8)
由图可知,在base64中,一个字节是由6位二进制数组成的。
二、原理
下面我以举例的方式说明,一共有两种情况。
1.情况一
下面举例说明:原数据为三个字节(utf-8)
将原数据转换成二进制则为24位的二进制,再将二进制以每六位一个字节用base64编码转换成了四个字节。
例如:编码Man
三个字符Man编码后为四个字符TWFu。
由此看出原数据一个字节需要8位,base64编码需要6位。所以如果要传数据,就得是3得倍数的字节。所以Base64编码后的数据比原数据略长,为原来的4/3.
2.情况二
当然如果要需要编码的字节数不是3的倍数,就需要多出1或2个字节,那么可以使用下面的方法进行处理:先使用0字节值在末尾补足,使其能够被3整除,然后再进行Base64的编码。在编码后的Base64文本后加上一个或两个 = 号,代表补足的字节数。也就是说,当最后剩余两个八位(待补足)字节(2个byte)时,最后一个6位的Base64字节块有四位是0值,最后附加上两个等号;如果最后剩余一个八位(待补足)字节(1个byte)时,最后一个6位的base字节块有两位(36-2*8=2)是0值,最后附加一个等号。 参考下表:
三、用途
1.显示 base64 编码的图片(网页中的一些小图片,可以直接以 base64 编码的方式嵌入,不用再链接请求消耗网络资源。)
2. 浏览器端图片压缩
3.对于证书来说,尤其是根证书,一般是 base64 编码的,在网上被很多人下载
4.电子邮件的附件一般是 base64 编码,因为附件往往有不可见字符
5.常用于在密码的加密后可能会出现不可用字符,所以往往用base64对叫加密后的密码进行编码。
四、注意
1.Base64编码是从二进制值到某些特定字符的编码,这些特定字符一共64个,所以称作Base64。
2.在项目中,对报文进行压缩、加密后,最后一步一般是 base64 编码。因为 base64 编码的字符串更适合不同平台,不同语言的传输。
3.算法是编码,不是压缩,编码后只会增加字节数(一般是比之前的多1/3,比如之前是3, 编码后是4)
4.算法简单,基本不影响效率
5.算法可逆,解码很方便,不用于私密传输。
6.毕竟编码了,肉眼不能直接读出原始内容。
7.加密后的字符串只有【0-9a-zA-Z+/=】 ,不可打印字符(转译字符)也可以传输。