Python Base64编码实例代码

发布时间:2020-09-14编辑:脚本学堂
本文介绍了Python Base64编码库的用法,一个Python Base64编码的实例代码,有需要的朋友参考下。

python下有Base64编码的库,可直接用。
我自己写了一个,主要是想调整编码字符的顺序。
注意:如果只是想调整最后两个字符(默认为"+/"),用不着自己写,b64encode有个altchars参数,用来指定最后两个字符。

完整代码:
 

复制代码 代码示例:
_keyStr = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=' 
 
def b64encode(s): 
    res = [] 
    leftover = len(s) % 3 
    for i in range(0, len(s)-leftover, 3): 
        c2 = ord(s[i]) 
        c1 = ord(s[i+1]) 
        c0 = ord(s[i+2]) 
        res.append(_keyStr[(c2 >> 2) & 0x3f]) 
        res.append(_keyStr[((c2 & 0x3) << 4) | ((c1 >> 4) & 0x0f)]) 
        res.append(_keyStr[((c1 & 0x0f) << 2) | ((c0 >> 6) & 0x03)]) 
        res.append(_keyStr[c0 & 0x3f]) 
    i += 3 
    if leftover == 1: 
        c2 = ord(s[i]) 
        res.append(_keyStr[(c2 >> 2) & 0x3f]) 
        res.append(_keyStr[(c2 & 0x3) << 4]) 
        res.append(_keyStr[-1]) 
        res.append(_keyStr[-1]) 
    elif leftover == 2: 
        c2 = ord(s[i]) 
        c1 = ord(s[i+1]) 
        res.append(_keyStr[(c2 >> 2) & 0x3f]) 
        res.append(_keyStr[((c2 & 0x3) << 4) | ((c1 >> 4) & 0x0f)]) 
        res.append(_keyStr[(c1 & 0x0f) << 2]) 
        res.append(_keyStr[-1]) 
    return ''.join(res) 
 
def b64decode(s): 
    res = [] 
    end = len(s) 
    if s[-1] == _keyStr[-1]: 
        end -= 4 
    for i in range(0, end, 4): 
        c3, c2, c1, c0 = _keyStr.index(s[i]), _keyStr.index(s[i+1]), _keyStr.index(s[i+2]), _keyStr.index(s[i+3]) 
        res.append(chr(((c3 << 2)) | ((c2 >> 4) & 0x03))) 
        res.append(chr(((c2 & 0x0f) << 4) | ((c1 >> 2) & 0x0f))) 
        res.append(chr(((c1 & 0x03) << 6) | (c0 & 0x03f))) 
    if end < len(s): 
        if s[-2] == _keyStr[-1]: 
            c3, c2 = _keyStr.index(s[end]), _keyStr.index(s[end+1]) 
            res.append(chr(((c3 << 2)) | ((c2 >> 4) & 0x03))) 
        else: 
            c3, c2, c1 = _keyStr.index(s[end]), _keyStr.index(s[end+1]), _keyStr.index(s[end+2]) 
            res.append(chr(((c3 << 2)) | ((c2 >> 4) & 0x03))) 
            res.append(chr(((c2 & 0x0f) << 4) | ((c1 >> 2) & 0x0f))) 
    return ''.join(res)