上一篇我们分析了单表替换破译的思路,下面看看具体的实现过程吧~
2. 算法细节
2.1 一、二元词试探
这个方法基于一个假设:明文中的一元词和二元词都会出现在S,D集合中,如果出现了不在集合中的单词,后面我们会做一步筛选来排除这些干扰。在这样的前提下,我们用试探的方式逐一匹配S,D集合中的词。
例如密文 di sygq t uspe tzsi ventzew sb st
我们找出密文中一元二元词{s, t}、{sb,st},就可以假设有密钥{s-a, t-i}、{sb-of, st-to},而sb-of可以得出{s-o, b-f},st-to可以得出{s-t,t-o}。将映射关系存入解码字母表中,我们就会发现字母表存在冲突,即一元词已经得出了{s-a},{t-i}这两个映射关系,后面又出现了{s-t},{t-o}。
这时就要作一步取舍,假设一元词的映射关系是正确的,放弃当前二元词找到的映射关系。继续在集合D中匹配下一个单词。这样的匹配关系记录下来就是一张表格的形式,例如表1.1
表1.1
C\P |
of |
to |
in |
it |
nb |
√ |
|||
vn |
√ |
|||
wv |
√ |
假设{w-i}放到解码字母表时产生冲突,那么{wv-in}的对应关系就要更改,以单词频率的先后顺序方式查找的话,下一个可能性应该是明文单词it,此时的对应关系表见