python中的base64模块,与base64转码代码实现
简介
Base64是网络上最常见的用于传输8Bit字节码的编码方式之一,Base64就是一种基于64个可打印字符来表示二进制数据的方法。可查看RFC2045~RFC2049,上面有MIME的详细规范。
Base64编码是从二进制到字符的过程,可用于在HTTP环境下传递较长的标识信息。采用Base64编码具有不可读性,需要解码后才能阅读。
base64库
encode, decode:用来编码和解码文件的,也可以StringIO里的数据做编解码;
encodebytes, decodebytes:用来编码和解码字符串;
b64encode, b64decode:用来编码和解码字符串,并且有一个替换符号字符的功能;
urlsafe_b64encode, urlsafe_b64decode:对url进行base64编解码,进行编码后会将输出数据中的’+’和’/’替换为’-‘和’_’。解码前则将数据中的’-‘和’_’替换为’+’和’/’。
用法示例:
b64encode和b64decode:对字符串操作
import base64 string = 'myblog zhao'.encode() #默认以utf8编码 res = base64.b64encode(string) print(res.decode()) #默认以utf8解码 res = base64.b64decode(res) print(res.decode()) #默认以utf8解码
需要注意的是,编码与解码的处理对象是byte,对原数据要先编码,使原本的str类型变成byte,解码后直接输出来的是byte对象,需要解码为字符串。
自己实现Base64编码
Base64要求把每三个8Bit的字节转换为四个6Bit的字节(3*8 = 4*6 = 24),然后把6Bit再添两位高位0,组成四个8Bit的字节,也就是说,转换后的字符串理论上将要比原来的长1/3。
规则
关于这个编码的规则:
①.把3个字节变成4个字节。
②.每76个字符加一个换行符。
③.最后的结束符也要处理。
alphabet = b"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/" def b64encode(src: str): ret = bytearray() if isinstance(src, str): __src = src.encode() else: return length = len(__src) for offset in range(0, length, 3): # 将字节遍历,每次取3个字节 tripple = __src[offset:offset + 3] r = 3 - len(tripple) # 判断是否需要补0 if r: tripple += b'\x00' * r # 用 ascii码0 补齐3个字节 x = int.from_bytes(tripple, 'big') # 将bytes转为int(ascii码),大端模式,返回十进制数 for i in range(18, -1, -6): index = x >> i & 0x3F # 每次取6个字节,并只选取最后六位。 ret.append(alphabet[index]) if r: ret[-r:] = b'=' * r # 对于补充的0 全部替换成= return bytes(ret)

浙公网安备 33010602011771号