2015-11-05 4 views
1

У меня есть два файла: один - это шифрование оригинала с использованием частотного анализа, а просто новая строка с расшифрованной строкой (некоторые символы, вероятно, не будут изменены корректно, но это нормально, плохо меняйте их вручную позже), но im completelly зациклился на том, как это сделать после подсчета случаев в обоих файлах.Использование частотного анализа для декодирования текстового файла, зашифрованного с помощью замены одного символа

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

Теперь я не знаю, куда идти отсюда, полностью застрял

EDIT 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 м.т. d jdbejewedwbje zjee edzjdbbddda"

ответ

0

В стандартном английском тексте наиболее распространенный символ является пространством. Некоторые криптографические открытые тексты включают пробелы, другие - нет. Вам нужно будет попробовать оба. После пробела наиболее распространенными символами являются ETA OIN SHR DLU в этом порядке. Совместите их с наиболее частыми буквами в cyphertext для грубого первого разреза при расшифровке.

Для достижения прогресса помимо этого вам может понадобиться нечто вроде словаря кроссвордов, который может сопоставлять шаблоны, такие как «S.I.OT», с словом: spigot, а затем распространять найденные «p» и «g» на другие слова. Если вы знаете контекст cyphertext, вы можете настроить свой словарь. Коммерческий текст будет содержать такие слова, как «маркетинг», в то время как военный текст будет содержать такие слова, как «батальон».