傑斐遜轉輪密碼


   今天,在攻防世界做了一道密碼題,需要用到傑斐遜轉輪密碼,特此記錄一下。

   我們看一下原題

傑斐遜轉輪密碼原理:托馬斯-傑弗遜轉輪加密由三串字符串組成,第一部分為加密表,第二部分為密鑰,第三部分為密文。加密表就是我們需要利用密鑰和密文來進行加密,具體的過程如下: 首先查看密鑰第一個字符為2,因此我們需要到加密表中去查找第2行的數據 2: < KPBELNACZDTRXMJQOYHGVSFUWI < 。再利用密文的第一個字符N進行旋轉,N在這里的作用就是旋轉過后的第一個字符即為N,在這里的旋轉為循環(即字母z后面為a)。同理,對之后的秘鑰進行相同操作。這里放上大佬寫的腳本:

 1  -*- coding:utf-8 -*-
 2 import re
 3 text=""
 4 with open("wheelcipher.txt","r",encoding="utf-8") as f:
 5     text=f.read()
 6 #print (text) 查看是否讀取完整
 7 code=[]#將字符提取出來放在這里
 8 code=re.findall(r"<(.*)<",text)
 9 for i in range(len(code)):
10     code[i]=code[i].strip()
11 print(code)
12 codetext="NFQKSEVOQOFNP"
13 codenum="2,3,7,5,13,12,9,1,8,10,4,11,6"
14 codenum=codenum.split(",")#把這些數字都弄到一個里面去
15 #print(codenum)
16 a=0
17 print("解密后的:")
18 for i in codenum:
19     index=code[int(i)-1].index(codetext[a])
20     a=a+1
21     code[int(i)-1]=code[int(i)-1][index:]+code[int(i)-1][:index]
22     print(code[int(i)-1])
23 
24 #完成了變形了
25 
26 print("下面是每一列的")
27 for i in range(len(code[0])):
28       str=""
29       print("第{}列的是:".format(i),end="")
30       for j in codenum:
31           str+=code[int(j)-1][i]
32       print(str.lower())
View Code

然后執行后為

其中每一列的意思是將解密后的所有行字母一列一列輸出的,最后的難題就是flag在哪,我看了別人的解析,他們說是第17列的是,答案確實正確,但我沒找到為什么,難道要一列一列試嗎?望哪位大佬知道的話能夠告知,萬分感謝!

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM