base64

#bash64编码
base64_table=b"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"

def base64encode(input_):
    #补齐
    length=len(input_)
    buf=b""
    index=0
    while index+3<=length:
        ch=input_[index:index+3]
        index+=3
        tmp=ch[0]//4
        buf+=base64_table[tmp:tmp+1]
        tmp=ch[0]%4*16+ch[1]//16
        buf+=base64_table[tmp:tmp+1]
        tmp=ch[1]%16*4+ch[2]//64
        buf+=base64_table[tmp:tmp+1]
        tmp=ch[2]%64
        buf+=base64_table[tmp:tmp+1]
    if length-index==1:
        ch=input_[index:index+1]
        tmp=ch[0]//4
        buf+=base64_table[tmp:tmp+1]
        tmp=ch[0]%4*16
        buf+=base64_table[tmp:tmp+1]
        buf+=b"=="
    elif length-index==2:
        ch=input_[index:index+2]
        tmp=ch[0]//4
        buf+=base64_table[tmp:tmp+1]
        tmp=ch[0]%4*16+ch[1]//16
        buf+=base64_table[tmp:tmp+1]
        tmp=ch[1]%16*4
        buf+=base64_table[tmp:tmp+1]
        buf+=b"="
    return buf

def base64decode(input_):
    buf=b""
    index=0
    length=len(input_)
    while index+4<=length:
        value=[]
        value.append(base64_table.index(input_[index:index+1]))
        value.append(base64_table.index(input_[index+1:index+2]))
        if input_[index+2:index+3]!=b"=":
            value.append(base64_table.index(input_[index+2:index+3]))
            if input_[index+3:index+4]!=b"=":
                value.append(base64_table.index(input_[index+3:index+4]))
        index+=4

        if len(value)==4:
            tmp=value[0]*4+value[1]//16
            buf+=bytes((tmp,))
            tmp=value[1]%16*16+value[2]//4
            buf+=bytes((tmp,))
            tmp=value[2]%4*64+value[3]
            buf+=bytes((tmp,))

        elif len(value)==3:
            tmp=value[0]*4+value[1]//16
            buf+=bytes((tmp,))
            tmp=value[1]%16*16+value[2]//4
            buf+=bytes((tmp,))

        elif len(value)==2:
            tmp=value[0]*4+value[1]//16
            buf+=bytes((tmp,))

    return buf
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值