【题目描述】
墙上写了好多奇奇怪怪的 英文字母,排列的的整整齐齐,店面前面还有一个大大的类似于土耳其旋转烤肉的架子,上面一圈圈的 也刻着很多英文字母,你是一个小历史迷,对于二战时候的历史刚好特别熟悉,一拍大腿:“嗨呀!我知道 是什么东西了!”。提示:托马斯·杰斐逊。 flag,是字符串,小写。
【附件】
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 <
密钥为:2,3,7,5,13,12,9,1,8,10,4,11,6
密文为:NFQKSEVOQOFNP
【思路】
轮转机加密原理:
每一行是一个轮子,假设有N个轮子,每个轮子有M个字符。密钥是一串长为数字的串,代表取位顺序。密文是以密钥的顺序取出的,每一个轮子的首位字符组成的串。
解密方法:
Step1:归位。密文的每一个字符是每一行的首字符,则根据密钥的顺位把轮子顺序旋转(循环移位)到对应的密文字符上,如第一个字符(2,N),把第2行< KPBELNACZDTRXMJQOYHGVSFUWI < 的N移到第一位,得到“NACZDTRXMJQOYHGVSFUWIKPBEL”,其余同理。
Step2:读取。每个轮子的取一位,对应明文(即按列读),哪一列有意义就是明文。
python脚本:
# -*- coding:utf-8 -*-
import re
text=""
with open("wheelcipher.txt","r",encoding="utf-8") as f:
text=f.read()
code=[]#提取字符,放在list里
code=re.findall(r"<(.*)<",text)
for i in range(len(code)):
code[i]=code[i].strip() # 删去首尾空串
#print(code)
codetext="NFQKSEVOQOFNP"
codenum="2,3,7,5,13,12,9,1,8,10,4,11,6"
codenum=codenum.split(",")#把这些数字都弄到一个里面去
#print(codenum)
a=0
print("旋转后:")
# 旋转
for i in codenum:
index=code[int(i)-1].index(codetext[a])
a=a+1
code[int(i)-1]=code[int(i)-1][index:]+code[int(i)-1][:index]
print(code[int(i)-1])
print("\n按列读取:")
for i in range(len(code[0])):
str=""
print("第{}列: ".format(i),end="")
for j in codenum:
str+=code[int(j)-1][i]
print(str.lower())
代码引用自 https://blog.csdn.net/qq_43504939/article/details/100058169
结果:
第0列: nfqksevoqofnp
第1列: ahgcxiusnwcbn
第2列: ctwpcubfotuvy
第3列: zetmdrmezgkcc
第4列: dqhneyczuvtxj
第5列: tgszrtqwtrezb
第6列: rypqfawawsbqf
第7列: xxywvsaxdcswz
第8列: mpbxbbojczxed
第9列: jlxygkigvqqrr
第10列: qoiitjkdrkytu
第11列: oczhydzljeips
第12列: ykufhfgullzol
第13列: hblrnhjbxmmio
第14列: gdvlugxvkxjuq
第15列: vmkamlpiiywyx
第16列: sambkvlqsiaav
第17列: fireinthehole
第18列: uzaulcdkfprst
第19列: wvfoomsyaupka
第20列: irdtpxrppdldm
第21列: kncsjzfnmnnjk
第22列: psegzphtyadfg
第23列: bjojqqecgjvhh
第24列: eunvaonrhfhgi
第25列: lwjdwwymbbgmw
通过逐行检验,我们可以看到,有实际意义的在第17列:fireinthehole,是不是燃起来了?!hhh..
【答案】
fireinthehole
如果文章对你有帮助,麻烦动动手指点赞、喜欢、支持一下咖啡猫,谢谢!