1. 程式人生 > 實用技巧 >托馬斯.傑斐遜

托馬斯.傑斐遜

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)