如题
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('兽耳即为正义!可爱即为真理!')