目录
很多网页传输协议都会采取Base64算法对数据进行加密处理,Base64常用于在通常处理文本数据的场合,表示、传输、存储一些二进制数据,包括MIME的电子邮件及XML的一些复杂数据。因此掌握此种加解密方法应该是必须要掌握的方法。对于其算法的思想和核心处理可以产生很多衍生的算法以及加密方法。
Base64是一种二进制到文本的编码方式。如果要更具体一点的话,可以认为它是一种将 byte数组编码为字符串的方法,而且编码出的字符串只包含ASCII基础字符。所以每6个比特为一个单元,对应某个可打印字符。3个字节有24个比特,对应于4个Base64单元,即3个字节可由4个可打印字符来表示。它可用来作为电子邮件的传输编码。在Base64中的可打印字符包括字母A-Z、a-z、数字0-9,这样共有62个字符,此外两个可打印符号在不同的系统中而不同。
Base64常用于在通常处理文本数据的场合,表示、传输、存储一些二进制数据,包括MIME的电子邮件及XML的一些复杂数据。由于HTTP协议是文本协议,所以在HTTP协议下传输二进制数据需要将二进制数据转换为字符数据。然而直接转换是不行的。因为网络传输只能传输可打印字符。
在ASCII码中规定,0~31、127这33个字符属于控制字符,32~126这95个字符属于可打印字符,也就是说网络传输只能传输这95个字符,不在这个范围内的字符无法传输。那么该怎么才能传输其他字符呢?其中一种方式就是使用Base64。
值得注意的是Base64不是加密算法,其仅仅是一种编码方式,算法也是公开的,所以不能依赖它进行加密。
Base64算法生成的字符串可以安全地在任何实现了Base64算法的计算机之间传输。对于非二进制数据,是先将其转换成二进制形式,然后每连续6比特(2的6次方=64)计算其十进制值,根据该值在上面的索引表中找到对应的字符,最终得到一个文本字符串。
假设我们要对 Hello! 进行Base64编码,按照ASCII表,其转换过程如下图所示:
这里我们需要先将文本数据转换为二进制格式再进行base64编码:
- import base64
- #加密
- str1="Hello!"
- b=base64.b64encode(str1.encode('utf-8')).decode("utf-8")
那么对于溢出的位数,补零处理,若是少了一组,直接用“=”代替。:
- import base64
- #加密
- str1="Ma"
- b=base64.b64encode(str1.encode('utf-8')).decode("utf-8")
- b
如果根本不够24位凑成一组,那么仍然使用“=”,代替:
- import base64
- #加密
- str1="M"
- b=base64.b64encode(str1.encode('utf-8')).decode("utf-8")
- b
基于“=”的填充机制,我们可以通过观察Base64编码的字符串最后有几个“=”来判断最后一组24位中有几个“填充字节”。
解码也就是逆回来根据索引对应的二进制码解码一遍,
- #解密
- c = base64.b64decode(b.encode("utf-8")).decode("utf-8")
- print("解密的结果:",c)
以上就是本期全部内容。我是fanstuck ,有问题大家随时留言讨论 ,我们下期见。