У меня есть два файла: один - это шифрование оригинала, используя частотный анализ, и просто создайте новую строку с расшифрованной строкой (некоторые символы, вероятно, не будут изменены корректно, но все в порядке, плохо измените их вручную позже), но 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)));
Теперь я не знаю, куда идти отсюда, полностью застрял
ИЗМЕНИТЬ 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"
В стандартном английском тексте наиболее распространенным символом является пространство. Некоторые криптографические открытые тексты включают пробелы, другие - нет. Вам нужно будет попробовать оба. После пробела наиболее распространенными символами являются ETA OIN SHR DLU в этом порядке. Совместите их с наиболее частыми буквами в cyphertext для грубого первого разреза при расшифровке.
Для достижения прогресса вам может понадобиться нечто вроде словаря кроссвордов, который может сопоставлять шаблоны типа SIOT со словом: spigot, а затем расширять найденные "p" и "g" на другие слова. Если вы знаете контекст cyphertext, вы можете настроить свой словарь. Коммерческий текст будет содержать такие слова, как "маркетинг", в то время как военный текст будет содержать такие слова, как "батальон".