给了一个txt文件:
从题目可以看出是与base64相关,不难发现是base64的变种,将base64的顺序改变了,但还有4个字符不知道
可以写python脚本得到缺失的4个字符
代码如下:
import string
s = 'JASGBWcQPRXEFLbCDIlmnHUVKTYZdMovwipatNOefghq56rs****kxyz012789+/'
j = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
for i in j:if i not in s:print(i),
结果如下:
可以知道缺少这4个,但不知道顺序,可以通过代码整出24种不同的base64变种的排序
代码如下:
t=[]
for i in itertools.permutations('ju34',4):t.append(''.join(i))
在通过python脚本得到24种不同的解码
通过base64的原理将密文按照base64变种的排序变成6位的二进制数再按每八个数切分,再通过二进制数转换成字符串得到解码,这里用的是libnum库里的b2s
具体代码如下:
import string
import gmpy2
import libnum
import base64
import itertools
def cut(obj,sec):return([obj[i:i+sec] for i in range(0,len(obj),sec)])
t=[]
for i in itertools.permutations('ju34',4):t.append(''.join(i))
c = 'MyLkTaP3FaA7KOWjTmKkVjWjVzKjdeNvTnAjoH9iZOIvTeHbvD'
b = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
a=""
d=''
for g in t:s = 'JASGBWcQPRXEFLbCDIlmnHUVKTYZdMovwipatNOefghq56rs'+g+'kxyz012789+/'for i in c:for j in range (64):if i == s[j]:a=a+'{:06b}'.format(j) a=a+'00'a=cut(a,8)for i in range (38):d = d + libnum.b2s(a[i])a=''print(d)d=''
得到24个不同的解码
找出最像flag的解码
得到flag