Training: Crypto - Substitution II (Crypto, Training)

本文介绍了一种高级的简单替换密码解密方法,涉及到大字符集(0-255)的加密。解密过程结合了词频分析和quipiuq工具,通过替换密文中的常见字符并分析词频,逐步还原了明文。最终,通过特定字符替换解决了大小写和标点符号的加密问题,揭示了隐藏的信息。
摘要由CSDN通过智能技术生成

Training: Crypto - Substitution II (Crypto, Training)

题目描述
I have created an advanced version of the simple substitution cipher.
It can now use chars in range from 0-255, but that should not stop you.
The ciphertext is in the language of this text, and uses correct punctuation and case-sensitivity.

我创建了简单替换密码的进阶版本
它现在可以使用 0-255 范围内的字符,但这应该拦不住你。
密文使用此文本的语言,并使用正确的标点符号和区分大小写。

密文

70 4C 0E AD B3 EB 42 A3 35 EB 42 15 4C 0E 26 50
A9 E5 D8 15 26 A9 4C 0E 6A A9 6E EB 26 A9 D8 EB
B3 BE 6A B3 72 A9 EA A3 42 A9 7C 4C A3 A9 AD 4C
42 A9 15 42 50 A9 DB 6A B3 7C A9 6E 6A 35 35 A9
BE 4C 0E 6A A9 B7 6A 35 35 4C 6E A9 D8 EB 0D A0
6A B3 50 A9 E5 D8 6A A9 58 B3 4C EA 35 6A 91 A9
6E 15 42 D8 A9 42 D8 15 26 A9 0D 15 58 D8 6A B3
A9 15 26 A9 42 D8 EB 42 A9 42 D8 6A A9 A0 6A 7C
A9 15 26 A9 58 B3 6A 42 42 7C A9 35 4C 0E AD 50
A9 95 A9 6E 15 35 35 A9 0D 4C 91 6A A9 A3 58 A9
6E 15 42 D8 A9 EB A9 EA 6A 42 42 6A B3 A9 6A 0E
0D B3 7C 58 42 15 4C 0E A9 26 D8 6A 91 6A A9 EB
0E 7C A9 26 4C 4C 0E 50 A9 9A 4C A3 B3 A9 26 4C
35 A3 42 15 4C 0E A9 15 26 69 A9 26 58 4C BE BE
35 B7 6A EA 91 BE 26 50

Training: Crypto - Substitution I (Crypto, Training)的进阶版本,这道题和Training: Crypto - Digraphs (Crypto, Training)思路一样,要么穷举出255(0xFF)字母表所有的结果,一共(255!)种可能,要么采用词频分析的方法。这么大的字母表想穷举完比较费时,故这里采用词频分析的方法。
解密方法基本同Training: Crypto - Digraphs (Crypto, Training)一样,首先对16进制的密文进行处理,将其用可见符号来代替,再使用quipiup来辅助分析。
直接上代码

r = """
70 4C 0E AD B3 EB 42 A3 35 EB 42 15 4C 0E 26 50
A9 E5 D8 15 26 A9 4C 0E 6A A9 6E EB 26 A9 D8 EB
B3 BE 6A B3 72 A9 EA A3 42 A9 7C 4C A3 A9 AD 4C
42 A9 15 42 50 A9 DB 6A B3 7C A9 6E 6A 35 35 A9
BE 4C 0E 6A A9 B7 6A 35 35 4C 6E A9 D8 EB 0D A0
6A B3 50 A9 E5 D8 6A A9 58 B3 4C EA 35 6A 91 A9
6E 15 42 D8 A9 42 D8 15 26 A9 0D 15 58 D8 6A B3
A9 15 26 A9 42 D8 EB 42 A9 42 D8 6A A9 A0 6A 7C
A9 15 26 A9 58 B3 6A 42 42 7C A9 35 4C 0E AD 50
A9 95 A9 6E 15 35 35 A9 0D 4C 91 6A A9 A3 58 A9
6E 15 42 D8 A9 EB A9 EA 6A 42 42 6A B3 A9 6A 0E
0D B3 7C 58 42 15 4C 0E A9 26 D8 6A 91 6A A9 EB
0E 7C A9 26 4C 4C 0E 50 A9 9A 4C A3 B3 A9 26 4C
35 A3 42 15 4C 0E A9 15 26 69 A9 26 58 4C BE BE
35 B7 6A EA 91 BE 26 50 """

#进制转换(记得我以前还写了一个函数来着)
s = [i for i in r.split()]
for i in range(len(s)):
    s[i] = int(s[i],16)

#密文替换为单字符格式
text = ''
texttable = []
i = 0
for j in s:
    if j in texttable:
        text += chr(97 + texttable.index(j))
    else:
        text += chr(97 + i)
        i += 1
        texttable.append(j)
print(text)
#abcdefghifgjbcklmnojkmbcpmqfkmoferpesmthgmubhmdbgmjglmvpeumqpiimrbcpmwpiibqmofxypelmnopmzebtip{mqjgomgojkmxjzopemjkmgofgmgopmypumjkmzepggumibcdlm|mqjiimxb{pmhzmqjgomfmtpggpempcxeuzgjbcmkop{pmfcumkbbclm}bhemkbihgjbcmjk~mkzbrriwpt{rkl

此时得到的密文中又有特殊符号,而且通过题目描述可以知道明文中的大小写和标点符号又被加密进去了。。。此时又可以通过猜测单词来解开密文(如果你和作者特别熟悉确实可能猜到他的思路)。英语短文中出现最多的字符是空格,将密文中出现最多的字符替换为空格,短文格式就一目了然了。
分析密文词频

#出现字符统计
for i in range(len(set(s))):
    print(chr(97 + i) + ':',text.count(chr(97 + i)))

在这里插入图片描述
将m替换为空格得到

text = text.replace('m', ' ')
print(text)
#abcdefghifgjbckl nojk bcp qfk oferpes thg ubh dbg jgl vpeu qpii rbcp wpiibq ofxypel nop zebtip{ qjgo gojk xjzope jk gofg gop ypu jk zepggu ibcdl | qjii xb{p hz qjgo f tpggpe pcxeuzgjbc kop{p fcu kbbcl }bhe kbihgjbc jk~ kzbrriwpt{rkl

密文一下就明朗了起来,再用quipiup进行分析能够得到明显可读的信息。
在这里插入图片描述
至于特殊字符怎么处理,就只有通过观察可读内容来进行替换猜测,基本上是英文大小写问题和标点符号的问题了。我自己分析后,完整的代码

r = """
70 4C 0E AD B3 EB 42 A3 35 EB 42 15 4C 0E 26 50
A9 E5 D8 15 26 A9 4C 0E 6A A9 6E EB 26 A9 D8 EB
B3 BE 6A B3 72 A9 EA A3 42 A9 7C 4C A3 A9 AD 4C
42 A9 15 42 50 A9 DB 6A B3 7C A9 6E 6A 35 35 A9
BE 4C 0E 6A A9 B7 6A 35 35 4C 6E A9 D8 EB 0D A0
6A B3 50 A9 E5 D8 6A A9 58 B3 4C EA 35 6A 91 A9
6E 15 42 D8 A9 42 D8 15 26 A9 0D 15 58 D8 6A B3
A9 15 26 A9 42 D8 EB 42 A9 42 D8 6A A9 A0 6A 7C
A9 15 26 A9 58 B3 6A 42 42 7C A9 35 4C 0E AD 50
A9 95 A9 6E 15 35 35 A9 0D 4C 91 6A A9 A3 58 A9
6E 15 42 D8 A9 EB A9 EA 6A 42 42 6A B3 A9 6A 0E
0D B3 7C 58 42 15 4C 0E A9 26 D8 6A 91 6A A9 EB
0E 7C A9 26 4C 4C 0E 50 A9 9A 4C A3 B3 A9 26 4C
35 A3 42 15 4C 0E A9 15 26 69 A9 26 58 4C BE BE
35 B7 6A EA 91 BE 26 50 """

s = [i for i in r.split()]
for i in range(len(s)):
    s[i] = int(s[i],16)

text = ''
texttable = []
i = 0
for j in s:
    if j in texttable:
        text += chr(97 + texttable.index(j))
    else:
        text += chr(97 + i)
        i += 1
        texttable.append(j)
#print(text)
#abcdefghifgjbcklmnojkmbcpmqfkmoferpesmthgmubhmdbgmjglmvpeumqpiimrbcpmwpiibqmofxypelmnopmzebtip{mqjgomgojkmxjzopemjkmgofgmgopmypumjkmzepggumibcdlm|mqjiimxb{pmhzmqjgomfmtpggpempcxeuzgjbcmkop{pmfcumkbbclm}bhemkbihgjbcmjk~mkzbrriwpt{rkl
'''
#出现字符统计
for i in range(len(set(s))):
    print(chr(97 + i) + ':',text.count(chr(97 + i)))
'''

text = text.replace('m', ' ')
text = text.replace('l', '.')
text = text.replace('{', 'm')
text = text.replace('}', 'l')
text = text.replace('~', ':')
print(text)
#abcdefghifgjbck. nojk bcp qfk oferpes thg ubh dbg jg. vpeu qpii rbcp wpiibq ofxype. nop zebtipm qjgo gojk xjzope jk gofg gop ypu jk zepggu ibcd. | qjii xbmp hz qjgo f tpggpe pcxeuzgjbc kopmp fcu kbbc. lbhe kbihgjbc jk: kzbrriwptmrk.

在放到网页上去分析基本就可读了,已经可以通过分析结果还原明文了
在这里插入图片描述

'qongratulations. zhis one was harderx but you got it. very well done jellow hacker. zhe problem with this cipher is that the key is pretty long. | will come up with a better encryption sheme any soon. four solution is: spoddljebmds.'
'Congratulations. This one was harder, but you got it. very well done fellow hacker. The problem with this cipher is that the key is pretty long. I will come up with a better encryption sheme any soon. your solution is: spoddlfebmds.'

solution: spoddlfebmds

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值