【问题标题】:Using frequency analysis to decode text file encrypted with single char substitution使用频率分析解码单字符替换加密的文本文件
【发布时间】:2015-11-05 05:54:13
【问题描述】:

我有两个文件,一个是使用频率分析对原始文件进行加密,然后用解码后的字符串做一个新的字符串(有些字符可能不会被正确更改,但没关系,稍后会手动更改它们),但是在计算了两个文件的发生率后,我完全坚持如何做到这一点。

//gets string from both text files and converts in a array
        $reference = file_get_contents('reference_file.txt', true);
        $encrypted = file_get_contents('encrypted_file.txt', true);
        $refarray = str_split($reference, '1');
        $encarray = str_split($encrypted, '1');

//counts ocurrences in both strings and saves them as an array : "Character" ==> "Number of Ocurrences"
        $refarray1 = array_count_values(str_split(file_get_contents('reference_file.txt', true)));
        $refarray2 = array_count_values(str_split(file_get_contents('encrypted_file.txt', true)));

现在我不知道从哪里开始,完全卡住了

编辑 1:

 foreach ($refarray1 as $key => $val) {
            print "$key = $val <br \>";
            $aux69 = $key;
            foreach ($refarray2 as $key2 => $val2) {
                if ($val == $val2) {
                   $encrypted = str_replace($key2, $key, $encrypted);
                }
            }
        }

我想出了这个,但它仍然无法正常工作,它改变了加密字符串中的许多字母,但它不可读,它将大多数字符更改为只有 'j' 'd' 'e',最终字符串的示例:

" jjdebdda bw d jdbejewedwbje zjee edzjdbbddda"

【问题讨论】:

    标签: php arrays encryption frequency-analysis


    【解决方案1】:

    在标准英文文本中,最常见的字符是空格。一些加密明文包含空格,而另一些则不包含。您将需要尝试两者。在空格之后,最常见的字符是 ETA OIN SHR DLU,按此顺序排列。将它们与密文中最常见的字母相匹配,以便在解密时进行粗略的第一次切割。

    为了取得进一步的进展,您可能需要像填字词典这样的东西,它可以将“S.I.OT”等模式匹配到一个单词:spigot,然后将找到的 'p' 和 'g' 扩展到其他单词。如果您知道密文的上下文,那么您可以调整您的字典。商业文本将包含诸如“营销”之类的词,而军事文本将包含诸如“营”之类的词。

    【讨论】:

      最近更新 更多