在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)