前言:

   杰弗逊转轮加密,可以自己手动排列完成但是繁琐而且容易弄错,还是建议使用编程,我在手动弄得时候就是复制粘贴少了一个字母,弄了很久才发现,如果编程得话,就不会这样拉

转轮机加密:

题目如下:  

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

先搜搜看什么是转轮机吧,https://academy.binance.com/zh/security/history-of-cryptography,这篇文章讲到了:

加密学技术在几个世纪中不断地发展。托马斯杰斐逊,在17世纪末时,描述发表了一个在加密学中一个重大突破,但理论当时并没有实质建立过。他的发表,称为加密轮,由移动轮上的36个字母环组成,可用于实现复杂的编码上。这个概念是如此的先进,以至于它可以在第二次世界大战末期时,作为美国军事编码的基础。

我讲讲它得原理,

1.首先我们根据密钥来进行重新排列轮子

2.密钥得数字就代表第几个轮子,如2,3,7,5...代表第一行换成原来第二行得,第二行换成原来第三行得,依次类推

3.排好后根据密文,进行行内排列,如 KPBELNACZDTRXMJQOYHGVSFUWI 进行重新排列后,找到N所在位置,然后重新拼接 'NACZDTRXMJQOYHGVSFUWI'+'KPBEL'

4.对所有行排好后按照列取

5.

 

 

下面给出代码:

 1 import re
 2 
 3 table=[2,3,7,5,13,12,9,1,8,10,4,11,6]
 4 Ciphertext='NFQKSEVOQOFNP'
 5 with open(r'F:\桌面\tmp\6.txt','r') as f:
 6     data=f.read()
 7 
 8 #转轮机根据table重新排列
 9 def wheel_decode(data,table):
10     resultList=[]
11     pattern = re.compile('[A-Z]{26}')
12     result = pattern.findall(data)
13     
14     for i in table:
15         resultList.append(result[i-1])
16     return resultList
17 
18 resultList = wheel_decode(data,table)
19 
20 
21 
22 #根据密文重新排列
23 def rearrange(List,Ciphertext):
24     resultList=[]
25     for i in range(0,13):
26         resultList.append(List[i][List[i].find(Ciphertext[i]):]+List[i][:List[i].find(Ciphertext[i])])
27     return resultList
28 resultList= rearrange(resultList,Ciphertext)
29 
30 选取每一列,列出结果    
31 def rearrange2(List):
32     resultList=[]
33     s=''
34     for i in range(0,26):
35         for j in List:
36             s += j[i]
37          
38         resultList.append(s)
39         s=''
40     return resultList
41 
42 resultList = rearrange2(resultList)
43 for i in resultList:
44     print(i)

代码运行结果如下所示:

 1 NFQKSEVOQOFNP
 2 AHGCXIUSNWCBN
 3 CTWPCUBFOTUVY
 4 ZETMDRMEZGKCC
 5 DQHNEYCZUVTXJ
 6 TGSZRTQWTREZB
 7 RYPQFAWAWSBQF
 8 XXYWVSAXDCSWZ
 9 MPBXBBOJCZXED
10 JLXYGKIGVQQRR
11 QOIITJKDRKYTU
12 OCZHYDZLJEIPS
13 YKUFHFGULLZOL
14 HBLRNHJBXMMIO
15 GDVLUGXVKXJUQ
16 VMKAMLPIIYWYX
17 SAMBKVLQSIAAV
18 FIREINTHEHOLE
19 UZAULCDKFPRST
20 WVFOOMSYAUPKA
21 IRDTPXRPPDLDM
22 KNCSJZFNMNNJK
23 PSEGZPHTYADFG
24 BJOJQQECGJVHH
25 EUNVAONRHFHGI
26 LWJDWWYMBBGMW

然后我们发现第18行 fire in the hole有语义所以这个是正确答案

 

参考链接:

http://foreversong.cn/archives/138

 posted on 2020-08-13 19:48  缘初  阅读(2858)  评论(0编辑  收藏  举报