古典密码之杰斐逊转轮

本文介绍了杰斐逊转轮加密器的工作原理,多表替换加密机制,以及如何通过特定行的对应关系进行解密。提到美国军队曾使用此加密器,尽管有局限性,但其安全性较高。还提供了Python代码示例来展示解密过程。
摘要由CSDN通过智能技术生成

杰斐逊转轮加密器,这个装置由36片同样大小的木制转轮,套在一根杆上。每片转轮的圆周边缘上可有乱序的26个英文字母表。

通信双方必须各自拥有一套完全一样的转轮加密器。

        加密方转动加密器上的转轮,是明文(不超过36字)正好出现在同一行上,这时转轮排列的其他25行都是无意义的乱码,把其中任意一行的乱码抄写来,得到密文。

        接收方收到密文,转动加密器上的转轮,使得密文正好出现在同一行上,然后查看其他25行的内容,有意义的行就是明文。

        杰斐逊加密器属于典型的“多表替换”加密(每一个转轮就相当于一个替换的字母表),他很难破解,除非能得到通信双方所使用的加密装置。

        据称美国军队甚至到了20世纪60年代仍在使用它。这种加密器的缺点是每次只能传送简单的信息(字长不能超过转轮的片数),而且参与通信的各方不能太多。

例题:托马斯.杰斐逊(托马斯.杰斐逊 - Bugku CTF):

解密分析:

        根据杰斐逊转轮,即我们找到密文所对应密钥的行(例:H第2行,C第5行...)并将密文全都转到第一个位置。

python代码实现如下:

# 仅保留每一行字母
a = '1: <ZWAXJGDLUBVIQHKYPNTCRMOSFE <'
print(a.index('Z'))
print(a.index('E'))
print(a[4:30])

txt = '''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 <'''
x = []
lines = txt.strip().split('\n')
for line in lines:
    x.append(line[4:31].strip().replace('<', ''))
print(x)

# 根据密文对应的密钥调整转表
key = '2,5,1,3,6,4,9,7,8,14,10,13,11,12'
key = key.split(',')  # 转化为列表型
key = [int(i) for i in key]  # 转化为数值型
print(key)

flag = []
mi = 'HCBTSXWCRQGLES'
for m, n in zip(key, mi):
    flag.append(x[m - 1][x[m - 1].index(n):] + x[m - 1][:x[m - 1].index(n)])
print(flag)

for i in range(26):
    for j in flag:
        print(j[i],end='')
    print()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值