托馬斯.傑斐遜
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)