Расшифровка текста с использованием частотного анализа в C #. - PullRequest
0 голосов
/ 19 января 2012

Мне было поручено расшифровать текстовый файл с помощью частотного анализа.Это не вопрос «сделай это для меня», но я не знаю, что делать дальше.То, что я до сих пор читал в тексте из файла и считает частоту каждой буквы.Если бы кто-то мог указать мне правильное направление относительно замены букв в зависимости от их частоты, это было бы очень ценно.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;

namespace freqanaly
{
    class Program
    {
        static void Main()
        {
            string text = File.ReadAllText("c:\\task_2.txt");
            char[,] message = new char[2,26];
            Console.Write(text); int count = 0;
            for (int x = 'A'; x <= 'Z'; x++)
            {
                message[0, count] = (char)x;
                Console.WriteLine(message[0, count]);
                count++;
            }

            foreach (char c in text)
            {  count = 0;
                for (int x = 'A'; x <= 'Z'; x++)
                {
                    if (c == x)
                    {
                        message[1, count]++;
                    }
                    count++;
                }
            }

            Console.ReadKey();
            for (int x = 0; x <= 25; x++)
            {
                Console.Write(message[0, x]); Console.Write(" = "); Console.WriteLine((int)message[1, x]);
            }
            Console.ReadKey();
        }
    }
}

Ответы [ 2 ]

2 голосов
/ 29 марта 2012

Это зашифрованные данные, просто с использованием простого шифра замены (я полагаю). Смотрите определение кодирования / шифрования. http://www.perlmonks.org/index.pl?node_id=66249

Независимо от того, как предложил Сергей, получите таблицу частот букв и сопоставьте частоты. Вам нужно будет принять во внимание некоторое отклонение, поскольку нет никакой гарантии, что в документе точно 8,167% «А» (возможно, в этом документе процент «А» составляет 8,78 или 7,65%). Кроме того, убедитесь, что оценили каждое вхождение A, и не отличайте «a» от «A». Это можно сделать с помощью простого преобразования ToUpper или ToLower для персонажа; просто будь последовательным.

Кроме того, когда вы начнете получать менее распространенные, но все еще популярные письма, вам придется с этим справиться. C, F, G, W и M находятся вокруг отметки 2% +/-, поэтому вам нужно будет играть с расшифрованным текстом, пока буквы не поместятся в слове, и другими словами в документе, где происходит подстановка символов также произойдет. Эта концепция аналогична подгонке чисел в матрице Судуко. К счастью, как только вы найдете, куда письмо должно идти, оно распространяется по всему документу, и вы можете начать видеть расшифрованный простой текст. Например, «(F) это» и «(W) это» являются допустимыми словами, но если вы видите «(F) курицу» в документе, когда подставляете «F», вы можете догадаться, что вместо этого вы должны заменить этот символ буквой "W". (T) здесь и (W) здесь - еще один пример, и слово () курица само по себе не дает никаких указаний, поскольку и (W) курица, и (T) курица являются допустимыми словами. Именно здесь вы должны включить контекстные подсказки относительно того, какое слово имеет смысл. "Тогда самое время начать нашу атаку?" не имеет такого большого смысла, как «Когда подходящее время начинать нашу атаку?».

Все это предполагает, что вы используете моноальфебетическую замену. Полиальфебетическая замена более сложна, и вам, возможно, придется взломать примеры шифров Vigenère, чтобы попытаться найти способ обойти эту проблему.

Предлагаю прочитать "Кодовую книгу" С. Сингха. Это очень интересное чтение и легко переварить использованные исторические шифры и то, как они были взломаны.

http://www.google.com/products/catalog?q=the+code+book&rls=com.microsoft:en-us:IE-SearchBox&oe=&um=1&ie=UTF-8&tbm=shop&cid=5361323398438876518&sa=X&ei=hpR0T-HyObSK2QWvgvH-Dg&ved=0CFoQ8wIwBQ#

2 голосов
/ 19 января 2012

Затем вы должны взять некоторые из общедоступных списков частот на английском языке ( из Википедии, например ) и сравнить полученную вами таблицу фактических частот - чтобы найти замены букв.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...