Discuss / Python / 自写base64 encode代码

自写base64 encode代码

Topic source

儒生脱尘

#1 Created at ... [Delete] [Delete and Lock User]

自写base64转换函数

from functools import reduce
def ten2two(num,string=False):#十进制转二进制函数,str=Ture则返回转换后的字符串,否则返回数字
    str1=''
    while(num>0):
        num,str2=divmod(num,2)
        str1+=str(str2)
    if string:
        return str1[::-1]
    return int(str1[::-1])
def two2ten(num):#二进制转十进制函数
    sum=0
    for x in range(len(str(num))):
        sum+=int(str(num)[x:x+1])*2**(len(str(num))-x-1)
    return sum
def en_ascii(num):#获取ascii的值
    return ord(str(num))
def de_table(num):#数字字母对照表
    return 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'[int(num)]
def en_my_base64(num):
    b=0
    if len(str(num))%3!=0:#不足3的倍数则在末尾添加0到3的倍数
        b=3-len(str(num))%3
    a=reduce(lambda x,y:x+y,map(lambda x:'{:0>8}'.format(ten2two(en_ascii(x))),str(num)))+8*b*'0'
    c=[]
    for i in range(len(a)//6):
        c.append(de_table(two2ten(a[i*6:(i*6+6)])))
    if b==0:
        return reduce(lambda x,y:str(x)+str(y),c)
    return reduce(lambda x,y:str(x)+str(y),c)[:-b]+'='*b
print(en_my_base64('fsd5345dfgdf43fa'))

儒生脱尘

#2 Created at ... [Delete] [Delete and Lock User]

上面自己写的运行时间:0.001s

import time,base64
def safe_base64_decode(str):
    if len(str)%4!=0:
        str+=len(str)%4*'='
    return base64.b64decode(str)
print(safe_base64_decode('YWJjZA=='))

自带的base64运行时间:0.005s

速度快了,但是功能少,精简版。


  • 1

Reply