托马斯.杰斐逊
1: <ZWAXJGDLUBVIQHKYPNTCRMOSFE <
2: <KPBELNACZDTRXMJQOYHGVSFUWI <
3: <BDMAIZVRNSJUWFHTEQGYXPLOCK <
4: <RPLNDVHGFCUKTEBSXQYIZMJWAO <
5: <IHFRLABEUOTSGJVDKCPMNZQWXY <
6: <AMKGHIWPNYCJBFZDRUSLOQXVET <
7: <GWTHSPYBXIZULVKMRAFDCEONJQ <
8: <NOZUTWDCVRJLXKISEFAPMYGHBQ <
9: <QWATDSRFHENYVUBMCOIKZGJXPL <
10: <WABMCXPLTDSRJQZGOIKFHENYVU <
11: <XPLTDAOIKFZGHENYSRUBMCQWVJ <
12: <TDSWAYXPLVUBOIKZGJRFHENMCQ <
13: <BMCSRFHLTDENQWAOXPYVUIKZGJ <
14: <XPHKZGJTDSENYVUBMLAOIRFCQW <
密钥: 2,5,1,3,6,4,9,7,8,14,10,13,11,12
密文:HCBTSXWCRQGLES
flag格式 flag{你解密的内容}
要解这道题一定要理解加密的原理。
1.密钥跟密文的长度是一致的
2.密钥的意思是让你看第几行
3.密文的意思是让你旋转行代码的开头字母为密文
首先,密钥第一个数字是2,那么我们就只需要看第二行KPBELNACZDTRXMJQOYHGVSFUWI
之后,密文的第一个字母是H,第二行代码也有H,所以我们要旋转到以H开头的代码HGVSFUWIKPBELNACZDTRXMJQOY
之后我们就需要写python脚本(太难了,不会写,只能从网上找,分析了一下):
```#coding:utf-8
```#秘钥
```key="2,5,1,3,6,4,9,7,8,14,10,13,11,12"
#密文
cipher_text = "HCBTSXWCRQGLES"
f = open("zhuanlun.txt") ##打开文件
str_first_encry = [] ##新建一个空列表
for line in f: ##遍历文件中内容
line = line.strip() ##删除开头或是结尾的字符,默认为空格或换行符
str_first_encry.append(line) ##在列表末尾添加line遍历f文件的代码,也就是给列表添加f文件的内容
key_index = key.split(",") ##密钥以逗号分隔并且赋值
str_second_encry=[] ##新建空列表
for k in key_index: ##遍历密钥
str_second_encry.append(str_first_encry[int(k)-1])
##str_first_encry[int(k)-1]计算str_first_encry对应的下标(列表元素从0开始)
##并且把str_first_encry下标值对应的代码存储给str_second_encry列表
print(str_first_encry[int(k)-1]) ##输出str_first_encry列表对应下标的列表元素
for i,ch in enumerate(cipher_text):
##enumerate(cipher_text)遍历密文的字符串,并且给出索引序列,
##同时列出数据和数据下标,也就是说cipher_text的第一个元素是H
##使用i,ch遍历密文字符串
line = str_second_encry[i] ##把明文的文本下标对应的代码给line赋值
split_index = line.index(ch) ##index(ch)当遍历密文的字符串与line(str_second_encry)相等时,会停止并且返回一个数字
temp=[] ##新建空列表
temp[0:len(line)-split_index+1] = line[split_index:len(line)]
##split_index+1返回的数字+1;len(line)-split_index+1:line的长度-密文与明文对应重复的字母的数字
temp[len(temp):] = line[0:split_index] ##进行交换代码
str_second_encry[i] = "".join(temp)
```print("-------------------------------------")
```for plain in str_second_encry:
``` print(plain)

浙公网安备 33010602011771号