题目如下:
密文:MyLkTaP3FaA7KOWjTmKkVjWjVzKjdeNvTnAjoH9iZOIvTeHbvD== JASGBWcQPRXEFLbCDIlmnHUVKTYZdMovwipatNOefghq56rs****kxyz012789+/ oh holy shit, something is missing...
题目已经提示了是base,应该是打乱了字母表,然而不知道少了哪四个,首先我写了脚本看看缺了啥:
dic = [chr(i) for i in range(65, 91)]+[chr(i) for i in range(97, 123)]+[chr(i) for i in range(48, 58)]
strr = "JASGBWcQPRXEFLbCDIlmnHUVKTYZdMovwipatNOefghq56rskxyz012789+/"
for i in dic:
if (i not in strr):
print(i)
运行后得到ju34,这样就得到了完整的字母表,但是不知道这四个字符的顺序呢,所有可能先列了出来当作字母表去爆破密文,爆破的时候等号别忘记填在字母表最后:
(师傅们我的代码写的随性如老八一样可读性不太好就看个乐呵8Q Q。。
import itertools
dic = list(itertools.permutations(['j', 'u', '3','4']))
number = list(range(0,65))
chipertext = "MyLkTaP3FaA7KOWjTmKkVjWjVzKjdeNvTnAjoH9iZOIvTeHbvD=="
for i in dic:
strr = "JASGBWcQPRXEFLbCDIlmnHUVKTYZdMovwipatNOefghq56rs"+"".join(list(i))+"kxyz012789+/="
dict1 = dict(zip(number,strr))
dict2 = {v: k for k, v in dict1.items()}
value = []
final = []
flag = ""
for i in chipertext:
value.append(dict2[i])
for i in value:
i = bin(i)
if(len(i[2:])<6):
i = "0"*(6-len(i[2:]))+i[2:]
else:
i = i[2:]
flag += i
step = 8
splitt = [flag[i:i+step] for i in range(0,len(flag),step)]
for i in splitt:
final.append(i)
for i in final:
print(chr(int(i,2)),end="")
print("\n")
wctf2020{base64_1s_v3ry_e@sy_and_fuN}