破解替换密码
题目
EMGLOSUDCGDNCUSWYSFHNSFCYKDPUMLWGYICOXYSIPJCKQPKUGKMGOLICGINCGACKSNISACYKZSCKXECJCKSHYSXCGOIDPKZCNKSHICGIWYGKKGKGOLDSILKGOIUSIGLEDSPWZUGFZCCNDGYYSFUSZCNXEOJNCGYEWEUPXEZGACGNFGLKNSACIGOIYCKXCJUCIUZCFZCCNDGYYSFEUEKUZCSOCFZCCNC
提示:F解密为w
一开始以为是简单的替换,尝试逐个实验确定参数,做到自闭,最后还是靠统计+语法分析的方式做了出来。
首先,统计出现的字符及其数量,
'''
count={}
for i in range(len(cipher)):
count[cipher[i]] = 0
for i in range(len(cipher)):
count[cipher[i]] += 1
print(count)
{'E': 12, 'M': 5, 'G': 24, 'L': 7, 'O': 10, 'S': 20, 'U': 14, 'D': 8, 'C': 37, 'N': 13, 'W': 5, 'Y': 15, 'F': 9, 'H': 5, 'K': 18, 'P': 6, 'I': 15, 'X': 7, 'J': 7, 'Q': 1, 'A': 5, 'Z': 13}
'''
C的出现频率远高于其他字符,我们先假设C的明文为e,再依据题意替换F为w,可以得到:
由于wZee联想到wheel,所以,猜测Z代表h,N代表l,尝试得到:
再通过leU、Uhe等联想到U可能代表t,即:
出现过两次DGYYSw,暂时可以认为其为一个单独的单词。
这时候注意到EtEK,应该为一个或两个单词,前面部分还有一个Et,结合后面的句子成分让我想到了it is the…,也就是说E代表i,K代表s:
做到这儿,感觉S的问题又冒了出来,试过age后被否了,再回过头去看发现有3处tS,除去已经确定的剩下的比较常见的有to,th,但hOe显然构不成单词,还有几处Sr,又增加了S为o的可能,尝试S替代o:
这样的话O就只能代表n构成one:
YYow结尾的单词通常为llow,但感觉凑不成句子,观察一下Y,结尾处的Y让我一下想到了ster结尾,试一哈:
借助于强大的搜索引擎和欧路词典,我得到了独轮手推车这个短语:wheel barrow,也就是说D代表b,G代表a,有:
到这里发现rsb构不成单词开头,观察了一会儿,好像可以改成lowers,根据语感猜测MaL为may,也就是M代表m,L代表y,这样最后的master也合乎逻辑:
猜测P为u,也就是bPt为but:
重新整理了下结构如上,推测Hlowers代表flowers,也就能相应的猜测出Wrow代表grow,WarIen代表garden,即W代表g,H代表f,I代表d:
到这里可以观察到如果X代表p,J代表C就可以得到produces和perfect两个符合句子意思的词:
上文中ehicle联想到vehicle刚好同主题相关,也就是说A大概率对应v,刚好,v还未使用过,最后Q代表j似乎比较恰当:
又排除了几处粗心留下的错误后,借助word的纠错功能断词为如下,是较为满意的答案:
完成的过程中除了一开始说的错误,还尝试了以频率为主要依据解密,也非常不理想,所幸最后利用语法猜测出了结果,这样看来,早期的解密也实在是一项需要运气的工作。