希望有生之年能完善这个搞一个自己写的库出来

如题

Ran.py↓

import os

__all__ = ['base64encode','base64decode','is_absolute_path']
__version__ = '0.0.4'

def base64encode(str1,code_table='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'):
    '''
    :param str1:str: base64密文
    :param code_table:str: 需替换的base64码表,默认为默认base64码表
    :return:str: base64明文
    '''

    #原码表备份code_table='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'

    # 遍历要加密的字符串进行第一次码表转化
    bin_str = ''
    for i in str1:
        bin_1=bin(ord(i))
        bin_str+='0'*(8-len(bin_1[2:]))+bin_1[2:]      #去掉bin()中的b

    # 计算结尾=的数量并补齐bin_str至6的倍数
    cout=0
    if len(bin_str)%6==4:
        cout=1
        bin_str=bin_str+'00'
    elif len(bin_str)%6==2:
        cout=2
        bin_str = bin_str + '0000'

    #以6个为一组对bin_str分组
    list_str=[]
    for i in range(0,len(bin_str),6):
        list_str.append(bin_str[i:i+6])

    #将list_str按照码表进行编译并补上=
    output_str=''
    for i in list_str:
        position=int(i,2)
        output_str+=code_table[position]


    output_str+='='*cout
    return output_str


def base64decode(str1:str,code_table:str='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'):
    '''
    :param str1:str: base64明文
    :param code_table:str: 需替换的base64码表,默认为默认base64码表
    :return:str: base64密文
    '''
    # 原码表备份code_table='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
    #去掉结尾的=,后续可忽略=加上的0所以不用特意将0删去
    cout=0
    while 1:
        if '=' in str1:
            str1=str1[:-1]
        else:
            break

    #按照码表反编译为6位二进制
    bin_6str = ''
    for i in str1:
        postion=code_table.find(i)
        bin_i=bin(postion)[2:]
        bin_6str+='0'*(6-len(bin_i))+bin_i


    #6位转8位并用acsll码转义,多出的可以自动忽略,也就是自动去=
    out_str=''
    for i in range(0,len(bin_6str)//8*8,8):
        out_str+=chr(int(bin_6str[i:i+8],2))
    return out_str


def is_absolute_path(path:str):
    '''
    传入一个文件地址,判断是不是绝对地址,是绝对地址直接返回地址。是相对地址就把地址转为绝对地址返回。
    :param path:str: 文件地址,需要以'.'开头,比如'./base64_ran.py','./base64_ran.py','../../base64_ran.py'
    :return abspath:str  文件的绝对地址
    '''
    if os.path.isabs(path):
        return path
    while path[0] == '.':
        path = path[1:]
    return os.path.abspath('.')+path

print('兽耳即为正义!可爱即为真理!')
if __name__ == "__main__":
    print('兽耳即为正义!可爱即为真理!')

点赞

发表回复

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