使用频率分析来解码使用单个字符替换加密的文本文件

时间:2015-11-05 05:54:14

标签: php arrays encryption frequency-analysis

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

//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);
                }
            }
        }

我想出了这个,但它仍然不起作用,它改变了加密字符串中的大量字母,但它不可读,它改变了大多数字符只有&#39; j&#39; &#39; d&#39; &#39; e&#39;,最终字符串的示例:

  

&#34; jjdebdda bw d jdbejewedwbje zjee edzjdbbddda&#34;

1 个答案:

答案 0 :(得分:0)

在标准英文文本中,最常见的字符是空格。一些加密明文包括空格,其他则没有。你需要尝试两者。在空格之后,最常见的字符是ETA OIN SHR DLU。将这些字母与密文中最常用的字母进行匹配,以便在解密时进行粗略的第一次剪切。

除此以外的进展,您可能需要类似填字游戏字典的东西,它可以将“S.I.OT”等模式与单词:spigot匹配,然后将找到的'p'和'g'扩展到其他单词。如果你知道密文的上下文,那么你可以调整你的字典。商业文本将包含“营销”等词语,而军事文本将包含“营”等词语。