python2 实现base64编解码

今天又划水了一天,本来打算看看堆,写一下这几天比赛的WriteUp,队友突然跟我提base64那个编码表。。于是就coding了一下午,写好以后发现,一些地方写的很笨( for生成列表没有写二次循环 ),听dalao讲用位运算好写,改天再试(咕咕咕??)

疑问: = 本来是用作填充,我写的时候没有用=,但是可以解密正常带=的base64

#coding:utf-8
#Author : W22
words = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/='
def my_base64_enc(plaintext):
    res = ''
    if len(plaintext)%3 != 0:
        plaintext = plaintext.ljust(len(plaintext)+(3-len(plaintext)%3),'\x00')
    for j in range(0,len(plaintext),3):
        x_box = ''.join([bin(ord(i))[2:].rjust(8,'0') for i in plaintext[j]+plaintext[j+1]+plaintext[j+2]])
        # x_box : splice
        y_box = [x_box[i]+x_box[i+1]+x_box[i+2]+x_box[i+3]+x_box[i+4]+x_box[i+5] for i in range(0,24,6)]
        # y_box : split
        z_box = [words[int(i,2)]for i in y_box]
        # z_box : result
        res += ''.join(z_box)
    return res
def my_base64_dec(cipher):
    res = ''
    for j in range(0,len(cipher),4):
        z_box = [bin(words.index(i)) for i in cipher[j]+cipher[j+1]+cipher[j+2]+cipher[j+3]]
        # z_box : split
        y_box = ''.join([i[2:].rjust(6,'0') for i in z_box])
        # y_box : splice
        x_box = [chr(int(y_box[i]+y_box[i+1]+y_box[i+2]+y_box[i+3]+y_box[i+4]+y_box[i+5]+y_box[i+6]+y_box[i+7],2)) for i in range(0,24,8)]
        # x_box : result
        res += ''.join(x_box).strip('\x00')
    return res

s = 'ruozhi哥哥,爱你'
print my_base64_enc(s)
print my_base64_dec((my_base64_enc(s)))

发表评论

电子邮件地址不会被公开。 必填项已用*标注