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)

 

 


 
posted @ 2020-12-08 16:48  韩梅梅op  阅读(339)  评论(0)    收藏  举报