根据托马斯·杰斐逊可以看出是杰斐逊转轮加密器:由36片同样大小的木制转轮,套在一根杆上。每片转轮的圆周边缘上可有乱序的26个英文字母,加密方转动加密器上的转轮,是明文(不超过36字)正好出现在同一行上,这时转轮排列的其他25行都是无意义的乱码,把其中任意一行的乱码抄写来,得到密文。
解题思路:按照密钥数字的顺序重新排列13组字母,然后查找每一个密文在对应字母表(转轮)里的位置,并将该密文放到头部,剩下的25种(也就是除去密文的情况)就会有flag。
txt='''1: < ZWAXJGDLUBVIQHKYPNTCRMOSFE <
2: < KPBELNACZDTRXMJQOYHGVSFUWI <
3: < BDMAIZVRNSJUWFHTEQGYXPLOCK <
4: < RPLNDVHGFCUKTEBSXQYIZMJWAO <
5: < IHFRLABEUOTSGJVDKCPMNZQWXY <
6: < AMKGHIWPNYCJBFZDRUSLOQXVET <
7: < GWTHSPYBXIZULVKMRAFDCEONJQ <
8: < NOZUTWDCVRJLXKISEFAPMYGHBQ <
9: < XPLTDSRFHENYVUBMCQWAOIKZGJ <
10: < UDNAJFBOWTGVRSCZQKELMXYIHP <
11: < MNBVCXZQWERTPOIUYALSKDJFHG <
12: < LVNCMXZPQOWEIURYTASBKJDFHG <
13: < JZQAWSXCDERFVBGTYHNUMKILOP <'''
x=[]
line=txt.strip().split('\n')
#print(line)
for i in line:
x.append(i[4:32].strip().replace('<','').strip())
#print(x)
#x=['ZWAXJGDLUBVIQHKYPNTCRMOSFE', 'KPBELNACZDTRXMJQOYHGVSFUWI', 'BDMAIZVRNSJUWFHTEQGYXPLOCK', 'RPLNDVHGFCUKTEBSXQYIZMJWAO', 'IHFRLABEUOTSGJVDKCPMNZQWXY', 'AMKGHIWPNYCJBFZDRUSLOQXVET', 'GWTHSPYBXIZULVKMRAFDCEONJQ', 'NOZUTWDCVRJLXKISEFAPMYGHBQ', 'XPLTDSRFHENYVUBMCQWAOIKZGJ', 'UDNAJFBOWTGVRSCZQKELMXYIHP', 'MNBVCXZQWERTPOIUYALSKDJFHG', 'LVNCMXZPQOWEIURYTASBKJDFHG', 'JZQAWSXCDERFVBGTYHNUMKILOP']
key='2,3,7,5,13,12,9,1,8,10,4,11,6'
key=key.split(',')
key = [int(i) for i in key]
#print(key)
#key=[2, 3, 7, 5, 13, 12, 9, 1, 8, 10, 4, 11, 6]
c='NFQKSEVOQOFNP'
newtxt=[]
for i in key:
newtxt.append(x[i-1])#将转轮按照密文的顺序排列
for i in range(len(newtxt)):
index=newtxt[i].index(c[i])#查找密文在对应转轮中的位置
newtxt[i]=newtxt[i][index:]+newtxt[i][0:index]#将密文其放到首位
for i in range(1,len(newtxt[0])):
for j in range(len(newtxt)):
print(newtxt[j][i].lower(),end="")
print('\n')
最后就能找到flag啦