base(base自定义解码)
题目
import base64
str = "j2rXjx8wSZjD"
zdy = "GHI3KLMNJOPQRSTUb=cdefghijklmnopWXYZ/12+406789VaqrstuvwxyzABCDEF5"
stand = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789=+/"
ec = str.maketrans(stand,zdy)
dc = str.maketrans(zdy,stand)
def encode(x):
return x.translate(ec)
def decode(x):
return x.translate(dc)
flag = decode(str)
print(flag)
flag = base64.b64decode(flag)
print(flag)
或
import string
zfj = "GHI3KLMNJOPQRSTUb=cdefghijklmnopWXYZ/12+406789VaqrstuvwxyzABCDEF5"
sy = {char: index for index, char in enumerate(zfj)}
ys = {index: char for index, char in enumerate(zfj)}
def jm(s):
tc = s.count('E')
s = s.rstrip('E')
ejz = ''
for char in s:
index = sy[char]
ejz += bin(index)[2:].zfill(6)
ejz = ejz[:len(ejz) - tc * 2]
jmzj = bytearray()
for i in range(0, len(ejz), 8):
byte = int(ejz[i:i + 8], 2)
jmzj.append(byte)
return jmzj
def bm(s):
zj= s.encode()
ejz = ''
for byte in zj:
ejz += bin(byte)[2:].zfill(8)
while len(ejz) % 6 != 0:
ejz += 'E'
bm = ''
for i in range(0, len(ejz), 6):
index = int(ejz[i:i + 6], 2)
bm += ys[index]
padding = len(s) % 3
if padding == 1:
bm += 'EE'
elif padding == 2:
bm += 'E'
return bm
str = 'j2rXjx8wSZjD'
# bm = bm(str)
# print("编码:",bm)
jm = jm(str).decode()
print("解码:", jm)
或