章节大纲

  • 众所周知,单表替换密码是不安全的,因为可以通过字母的频率分析来破译。本实验为你提供了一个使用单表替换密码加密的密文。也就是说,原始文本中的每个字母都由另一个字母替换,而替换的字母是不变的(即在加密过程中,一个字母始终被同一字母替换)。你的任务是使用频率分析来破译这段密文,我们已知原始文本是英文文章,密文在 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
     
    英文字母、二元组、和三元组出现的频率可以参考本章节的资源。