攻防世界 —— Crypto新手练习区10题(转轮机加密)题解

题目分析

从题目到描述都很清楚的指明了加密算法——转轮机加密,又叫杰斐逊盘。背景介绍如下(从寻梦小生那里搬运的):

杰斐逊盘,一种生僻的古典密码,最早由托马斯·杰斐逊(Thomas Jefferson)于1795年发明的,这个密码并没有成为众所周知的,而是由一个世纪之后的伟大的密码的征服者艾蒂安·巴泽尔司令独立发明的。

加密原理很简单,首先需要一组带有标号的轮(从1号轮,2号轮...,n号轮),然后在这些轮的边缘刻有随机化的26个英文字母。最后在解密时,先要根据密钥将这组轮按顺序由上到下排列,再根据密文从上到下转动轮,直到可以从这个轮转机中读出密文,那么这时候明文一定也解密出来了,我们只需要一列一列的寻找可能的明文。

解题过程 

原理比较简单,但是要想手动解密还是比较耗时耗力的,于是我就写了一个很糙的python脚本。

original_wheel = ['ZWAXJGDLUBVIQHKYPNTCRMOSFE',
                  'PBELNACZDTRXMJQOYHGVSFUWI',
                  'BDMAIZVRNSJUWFHTEQGYXPLOCK',
                  'RPLNDVHGFCUKTEBSXQYIZMJWAO',
                  'IHFRLABEUOTSGJVDKCPMNZQWXY',
                  'AMKGHIWPNYCJBFZDRUSLOQXVET',
                  'GWTHSPYBXIZULVKMRAFDCEONJQ',
                  'NOZUTWDCVRJLXKISEFAPMYGHBQ',
                  'XPLTDSRFHENYVUBMCQWAOIKZGJ',
                  'UDNAJFBOWTGVRSCZQKELMXYIHP',
                  'MNBVCXZQWERTPOIUYALSKDJFHG',
                  'LVNCMXZPQOWEIURYTASBKJDFHG',
                  'JZQAWSXCDERFVBGTYHNUMKILOP ']#所给初始状态的轮转机
shifted_wheel = []
key = [2,3,7,5,13,12,9,1,8,10,4,11,6] #所给密钥
ciphertext = 'NFQKSEVOQOFNP' #所给密文

#按照密钥顺序对轮排序
for i in key:
    shifted_wheel.append(original_wheel[i-1])
print('按照密钥重新排序后的轮转机:\n',shifted_wheel)

#按照密文顺序转动轮
for i in range(len(shifted_wheel)):
    index = shifted_wheel[i].index(ciphertext[i])
    shifted_wheel[i] = shifted_wheel[i][index:]+shifted_wheel[i][0:index]
print('按照密文重新排序后的轮转机:\n',shifted_wheel)

#读取所有恢复的明文
print('输出所有可能的明文:')
for i in range(1,len(shifted_wheel[0])):
    for j in range(len(shifted_wheel)):
        print(shifted_wheel[j][i],end='')
    print('\n')

然后从输出的所有可能的明文中,寻找flag就好啦。 

 

你可能感兴趣的:(CTF)