题目传送门在此。
这一关终于不想前几关那么水了,不过也不难。题目给了3个加密后文本用来破解,然后明确表示是频率分析,于是乎,就按照要求来吧。
首先找到频率表:
A
|
B
|
C
|
D
|
E
|
F
|
G
|
H
|
I
|
J
|
0.082
|
0.015
|
0.028
|
0.043
|
0.127
|
0.022
|
0.020
|
0.061
|
0.070
|
0.002
|
K
|
L
|
M
|
N
|
O
|
P
|
Q
|
R
|
S
|
T
|
0.008
|
0.040
|
0.024
|
0.067
|
0.075
|
0.019
|
0.001
|
0.060
|
0.063
|
0.091
|
U
|
V
|
W
|
X
|
Y
|
Z
|
||||
0.028
|
0.010
|
0.023
|
0.001
|
0.020
|
0.001
|
字母可分为五组:
-
E:0.127
-
TAOINSHR:0.06~0.09
-
DL:0.04
-
CUMWFGYPB:0.015~0.023
-
VKJXQZ:小于0.01
最常见的两字母组合,依照出现次数递减的顺序排列:TH、HE、IN、ER、AN、RE、DE、ON、ES、ST、EN、AT、TO、NT、HA、ND、OU、EA、NG、AS、OR、TI、IS、ET、IT、AR、TE、SE、HI、OF。
最常见的三字母组合,依照出现次数递减的顺序排列:THE、ING、AND、HER、ERE、ENT、THA、NTH、WAS、ETH、FOR、DTH。
频率表准备好了然后就可以开工了,首先对给出的文本统计频率:
l = len(s) for j in xrange(3): d = {} for i in xrange(l - j): c = s[i:i+j+1] if c in d: d[c] += 1 else: d[c] = 1 ans = sorted(d.items(), key=lambda d:d[1]) fp.write('n'.join([str(one) for one in ans]) + 'n')
分别对三个文本统计之后,感觉单字母频率差不多,于是三个放到一起又统计了一遍,按照三个一起的统计结果来做。
首先看最高的几个三字母:
('JDQ', 15) ('CBG', 15) ('JSN', 16) ('CGE', 16) ('SNS', 19) ('DCU', 19) ('DSN', 22) ('SQN', 23) ('QGW', 27) ('JDS', 61)
JDS明显高出其它很多,似乎就是the,然后又看到SNS,那基本就肯定JDS是the、SNS是ere了。
然后QGW我首先猜测是ing,但替换了一下感觉不太对劲,然后SQN对应eir似乎也不太说的过去,于是猜测QGW对应and,这样SQN对应ear也似乎稍微好点。
然后查看双字母:
('QG', 46) ('JS', 47) ('UJ', 47) ('SQ', 48) ('SW', 52) ('DQ', 52) ('CG', 53) ('QN', 54) ('NS', 54) ('SU', 63) ('SN', 68) ('DS', 83) ('JD', 96)
由SU、UJ感觉U是s。
接着我在文本中发现了CnsteadBXthe,感觉就是instead of the了。
这样,观察三字母,CGE就应该是ing了。
查看单字母:
('W', 129)d ('V', 130) ('Z', 132) ('D', 210)h ('C', 227)i ('G', 227)n ('N', 240)r ('B', 246)o ('U', 257)s ('J', 301)t ('Q', 340)a ('S', 456)e
对比单字母频率表会发现,最高频的字母ETAOINSHR正好对应上了这边的频率,紧接着的DL中,L应该就是对应着VZ当中的一个了。
在三字母和双字母中查找V和Z,发现似乎只有在双字母的中等频率中能见到他们,如下:
('ZS', 24) ('VQ', 24) ('UQ', 24) ('NJ', 24) ('ZB', 25) ('ZQ', 25) ('QV', 25)
首先尝试将Z替换成l,然后查看替换后的文本,感觉很多地方似乎看起来不太像个单词了,于是乎改成将V替换成l。
查看第二个文本的开头发现althoMghnoattendanZereZordsfortheYeriods,就应该是although no attendance records for the,带回去看频率也挺符合。
这时候,文本基本已经解密的差不多了,但由于本人英语太烂,实在不想看了,于是乎,将第二个文本的开头(although no attendance records for theYeriodsur)拿到搜索引擎中一搜,就发现是关于莎士比亚的一段话,于是得以解决~~~
对应表如下(密文 -> 明文):
[('A', 'b'), ('B', 'o'), ('C', 'i'), ('D', 'h'), ('E', 'g'), ('F', 'k'), ('G', 'n'), ('H', 'q'), ('I', 'v'), ('J', 't'), ('K', 'w'), ('L', 'y'), ('M', 'u'), ('N', 'r'), ('O', 'x'), ('P', 'z'), ('Q', 'a'), ('R', 'j'), ('S', 'e'), ('T', 'm'), ('U', 's'), ('V', 'l'), ('W', 'd'), ('X', 'f'), ('Y', 'p'), ('Z', 'c')]
然后便可以解得密码~~~
不得不说,这关简直太符合频率分析,按照频率来,一猜一个准~~~