众所周知,单表替换密码是不安全的,因为可以通过字母的频率分析来破译。本实验为你提供了一个使用单表替换密码加密的密文。也就是说,原始文本中的每个字母都由另一个字母替换,而替换的字母是不变的(即在加密过程中,一个字母始终被同一字母替换)。你的任务是使用频率分析来破译这段密文,我们已知原始文本是英文文章,密文在
Labsetup.zip 文件中。
我们在 Labsetup/Files 文件夹中提供了一个 Python 程序 ( freq.py}),它读取 ciphertext.txt 文件,并生成 n-gram 的统计数据,包括单字母频率、二元词组频率(2 个字母序列)和三元词组频率(3 个字母序列)等。
$ ./freq.py
-------------------------------------
1-gram (top 20):
n: 488
y: 373
v: 348
...
-------------------------------------
2-gram (top 20):
yt: 115
tn: 89
mu: 74
...
-------------------------------------
3-gram (top 20):
ytn: 78
vup: 30
mur: 20
...
使用频率分析,你可以很容易地找到某些字符的明文。对于这些字符,你可能希望将其改回明文,因为这样可能会获得更多线索。最好对明文使用大写字母,这样对于同一字母,我们知道哪个是明文,哪个是密文。你可以使用 tr 命令来执行此操作。例如,下面我们将 in.txt 中的字母 a, e 和 t 分别替换为字母 X, G, E, 结果保存在 out.txt 中。
$ tr 'aet' 'XGE' < in.txt > out.txt
英文字母、二元组、和三元组出现的频率可以参考本章节的资源。