#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
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