豁然高

导航

base64编码

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

 

base64编解码就是将二进制数据和64中可打印字符的相互转化。

 

转化原理

1,将二进制数据每三个字节分为一组,每个字节占8bit,那么共有24个二进制位。

2,将上面的24个二进制位每6个一组,共分为4组。

3,在每组前添加2个0,每组由6个变为8个二进制位,总共32个二进制位,也就是四个字节。

4,根据base64编码对照表将每个字节转化成对应的可打印字符

 

转化实例如下图

 

 

 

 

问题:

1,为什么每6位分为一组?

  因为6个二进制位就是2的6次方,也就是64种变化,正好对应64个可打印字符。

  举一反三,如果是5位一组,那就对应32种可打印字符,就可以设计base32了。

2,分成四组后为什么每组添2个0变成四个字节?

  因为计算机存储的最小单位就是字节,也就是8位。所以每组6位前添2个0凑成8位的一个字节才能存储。

 

标准的base64编码对照表如下。

标准base64的64个可打印字符由52个大小写英文字母和10个数字(0-9)以及  / 和 + 组成。

 

 

base64是将二进制每三个字节转为4个字节,再根据base64编码对照表进行转化。那如果不足三个字节该如何?

对于标准base64是按如下处理的:

两个字节:两个字节共16个二进制位,依旧按照规则进行分组。此时总共16个二进制位,每6个一组,则第三组缺少2位,用0补齐,得到三个Base64编码,第四组完全没有数据则用“=”补上。

因此,如下图中“BC”转换之后为“QKM=”;
一个字节:一个字节共8个二进制位,依旧按照规则进行分组。此时共8个二进制位,每6个一组,则第二组缺少4位,用0补齐,得到两个Base64编码,而后面两组没有对应数据,都用“=”补上。

因此,如下图中“A”转换之后为“QQ==”

 

 

由于标准base64的64个可打印字符由52个大小写英文字母10个数字(0-9)以及  /+ 组成。而对于不足字节有需要用 = 来补齐字节。

所以经过标准base64编码后,就有可能包含+ /  = 这三种字符。

而在URL编码中这三种字符要么需要编码成%XX的形式,要么具有特殊意义。

所以标准的base64一般不用于对URL进行编码。

所以有些非标准的base64编码会把字符 +  / 分别变成 -  _ 或者其他字符,并且不会用 = 进行补位。

这样就可以对URL进行编码或者用于其它用途的编码

  

posted on 2019-09-25 15:58  豁然高  阅读(702)  评论(0编辑  收藏  举报