Training: Crypto - Digraphs (Crypto, Training)

Training: Crypto - Digraphs (Crypto, Training)

题目描述

This time I am using a digraph crypto scheme to encrypt one letter into two characters.
With only 26 different letters I am able to encrypt up to 26*26 different characters.
The big problem again is sharing the key, but the cipher is easily broken anyway.
The message is in the current language, is written with correct case and punctuation. There are no line breaks.

Good luck!

这次我使用有向图加密方案将一个字母加密为两个字符。

只有26个不同的字母,我可以加密多达26*26个不同的字符。

共享密钥又是一个大问题,但密码很容易被破解。

消息使用当前语言,用正确的大小写和标点符号书写。没有换行符。

好运!

密文

dtyspojbybvrjlcggqvrjlwoyspowakn clyscg gutwiaybqncejltwgu jlsnwowa tztwwawavrjbtw wacgiaiatwwawawncggqgqqnkn lsvrwa poysjl jlysys guwownwnwoiacggqjl twwojlsntwybnl covrwa wojlkc lstwgqgqnl jbysysgu wqysbkkn fbpojltwyb jlsnwowa aotwqncoysybgu vrwa waysgqcgjlwoyspobf potwgutwtztwtzwogugqyswakn

个人觉得这道题出的不好,(和凯撒2一样,作为练习题却对符号也进行加密,增大了破解的工作量)不过也不太影响解题。其他人猜测单词的解法太离谱了,还是常规解密适合我。

首先,作者给出提示,采用两个字符代替一个字符,理论上可以加密26*26个字符。知道了是替代密码类型(传统加密类型),就有两种解法,穷举和密码分析。如果字母表种类很少可以进行爆破,这里的字母表有26*26个有点多,还是采用词频分析的方法。先将密文还原为单字符替代的形式。

python3

std = 'dtyspojbybvrjlcggqvrjlwoyspowakn clyscg gutwiaybqncejltwgu jlsnwowa tztwwawavrjbtw wacgiaiatwwawawncggqgqqnkn lsvrwa poysjl jlysys guwownwnwoiacggqjl twwojlsntwybnl covrwa wojlkc lstwgqgqnl jbysysgu wqysbkkn fbpojltwyb jlsnwowa aotwqncoysybgu vrwa waysgqcgjlwoyspobf potwgutwtztwtzwogugqyswakn'
s = std.split(' ')

key = []
result = ""
for i in range(len(s)):
    j = s[i]
    for k in range(0,len(s[i]),2):
        if j[k:k+2] in key:
            result += chr(key.index(j[k:k+2]) + ord('a'))
        else:
            key.append(j[k:k+2])
            result += chr(key.index(j[k:k+2]) + ord('a'))
    result += " "
#print(len(key))
print(result)
#abcdefghifgjbckl mbh nopeqrgon gsjk tokkfdo khppokkuhiiql vfk cbg gbb njuujphig ojgsoew xfk jgy voiiw dbbn zb{l |cgoe gsjk }oqxben fk kbihgjbc~ conototjnibkl 

"""
result = result.replace('a','A')
result = result.replace('l','.')
result = result.replace('w',',')
result = result.replace('~',':')
result = result.replace('{','a')
result = result.replace('|','l')
result = result.replace('}','w')
print(result)
#Abcdefghifgjbck. mbh nopeqrgon gsjk tokkfdo khppokkuhiiq. vfk cbg gbb njuujphig ojgsoe, xfk jgy voii, dbbn zba. lcgoe gsjk woqxben fk kbihgjbc: conototjnibk.
"""

还原出单字符替代的形式,直接放在quipqiup就观察一下就能够得到答案。似乎解出message就能得到答案
在这里插入图片描述

如果觉得观察不出的,可以查看key盒的大小,发现有30个(> 26)字母,即有非小写字母也被加密进去了。这时可以根据解出的部分内容,对第一次解得单字符替代的密文进行修改得到第二次的单字符替代的密文(我找到4处,首字母大写、good job后面接符号、文章末尾接‘.’、solution接‘:’)。在扔到quipqiup中得到相对易读的内容,如果还是错的,那就只能你自己对比分析出的正确单词解出答案了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值