Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Частотный анализ текста, для его дешифрации 
:(
    Опции темы
Verus
Дата 13.9.2008, 10:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 120
Регистрация: 5.8.2008

Репутация: нет
Всего: нет



Помогите пожалуйста с алгоритмом.
Суть такая: необходимо произвести частотный анализ закодированного текста и некоторого эталонного текста на языке источника. По итогам сопоставления результатов частотного анализа для закодированного текста и эталона проводится первичное декодирование.
Искал в нете, может и плохо искал, но ничего толкового по этому вопросу не нашел :(
PM MAIL   Вверх
ksili
Дата 13.9.2008, 11:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2069
Регистрация: 3.11.2005
Где: Красноярск

Репутация: 2
Всего: 17



в общем так. считаешь частоты в эталонном тексте. Если эталона нет, то в принципе можешь частоты найти в инете. Если их не найдешь, то сразу говорю, что в русском языке самые распространённые буквы -  Л, Т, Р, Н, С, В, И, А, Е, О.
Затем считаешь частоты закодированныго текста. Выбираешь столько же самых частых букв. Затем пытаешься расшифровать, подставляя некую замену самых частых букв. Если ничего внятного не увидел, подставляй по-другому. после того как определишься с самыми частыми, менее частые буквы легко определятся по остаточному принципу


--------------------
Ничто так не развивает аналитическое мышление, как отладка сложной программы без возможности пошагового выполнения (с)
PM MAIL   Вверх
Verus
Дата 13.9.2008, 11:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 120
Регистрация: 5.8.2008

Репутация: нет
Всего: нет



Примерно так и делал. Ничего путного из этого не выходит.
PM MAIL   Вверх
ksili
Дата 13.9.2008, 11:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2069
Регистрация: 3.11.2005
Где: Красноярск

Репутация: 2
Всего: 17



По-другому никак и не получится.
Надо просто потерпеливее и повнимательней быть.

Сдлай программку, которая бы тебе помогала в переборе вариантов подстановки. Быстрее работа пойдёт


--------------------
Ничто так не развивает аналитическое мышление, как отладка сложной программы без возможности пошагового выполнения (с)
PM MAIL   Вверх
Verus
Дата 13.9.2008, 11:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 120
Регистрация: 5.8.2008

Репутация: нет
Всего: нет



Ну я и написал программу на С++. Делает она следующее: находит кол-во вхождений каждого символа зашифрованного текста и также с эталонным текстом и наиболее частые вхождения из эталонного заменяю на наиболее частые в зашифрованном. Вот кусок кода:
[code=nocolor]
Код

map <int,char, greater<int> > Analyse(CString txt)
{
    map <int,char, greater<int> > res;
    CString ch;
    char tmpchar;
    ch="";
    for(int k=0; k<txt.GetLength(); k++)
    {    
        int todo=0;
        tmpchar = txt[k];
        for(int j=0; j<ch.GetLength(); j++)
        {
            if(tmpchar==ch[j])
                todo++;
        }
        if ( (todo==0) ||(k==0))
        {
            int count=0;
            for(int i=0; i<txt.GetLength(); i++)
            {
                    if (tmpchar==txt[i])
                        count++;
            }
            res[count]=tmpchar;
            ch+=tmpchar;
        }
        
    }
    return res;
}

void CTestDlg::OnBnClickedOk()
{
    map<int,char, greater<int> > res;
    map<int,char, greater<int> > mid;
    map <int,char, greater<int> > :: iterator res_Iter;
    map <int,char, greater<int> > :: iterator exmpl_Iter;
    CString source;
    CString exmpl;
    e_SourceTxt.GetWindowTextA(source);
    e_ExmplTxt.GetWindowTextA(exmpl);
    res=Analyse(source);
    mid=Analyse(exmpl);
    res_Iter=res.begin();
    exmpl_Iter=mid.begin();
    int count=(res.size()<mid.size() ? res.size() : mid.size());
    for(int i=0; i<count; i++,res_Iter++,exmpl_Iter++)
    {
        source.Replace(res_Iter->second, exmpl_Iter->second);
    }
    e_SourceTxt.SetWindowTextA(source);
}

PM MAIL   Вверх
ksili
Дата 13.9.2008, 11:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2069
Регистрация: 3.11.2005
Где: Красноярск

Репутация: 2
Всего: 17



У тебя 10 символов одного алфавита надо заменить на 10 символов другого. как именно прога выбирает какой на какой менять? Алгоритм перебора вариантов сделан? Самый частый в эталоне не обязательно будет самым частым в зашифрованном тексте 


--------------------
Ничто так не развивает аналитическое мышление, как отладка сложной программы без возможности пошагового выполнения (с)
PM MAIL   Вверх
Verus
Дата 13.9.2008, 12:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 120
Регистрация: 5.8.2008

Репутация: нет
Всего: нет



Самый частый заменяется на самый частый в эталонном тексте. То что это не всегда так я уже понял =) поэтому и интересует как это исправить
PM MAIL   Вверх
v2v
Дата 13.9.2008, 12:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1620
Регистрация: 20.9.2006
Где: Киев

Репутация: нет
Всего: 56



кроме частот отдельных букв (самые популярные O ~ 9%, E ~ 7% самые редкие - Ф - в 50 раз реже буквы О) можно ещё считать частоты биграмм - пар букв : в русском языке самые популярные биграммы: СТ , ИЕ ... не помню...
вобщем возьмите любой русские текст и нпишите утилитку, которая посчитайте найболее популярные биграммы, найменее популярны и запретные - те которые не встречаются не разу (сойдёт текст на 10К символов).


--------------------
PM   Вверх
aleksh
Дата 15.9.2008, 09:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 609
Регистрация: 8.7.2008

Репутация: нет
Всего: 13



Цитата(v2v @  13.9.2008,  12:23 Найти цитируемый пост)
можно ещё считать частоты биграмм - пар букв

это даже лучше
к тому же, надо взять буквы эталлоного текста, и подстовлять их на возможные места в защифрованном, найти их место (ориентировочно) и вычислить алгоритм шифрования, потом декодировать по вычисленному алгоритму весь текст, повторять пока не получится читаемый текст
Цитата(v2v @  13.9.2008,  12:23 Найти цитируемый пост)
вобщем возьмите любой русские текст и нпишите утилитку, которая посчитайте найболее популярные биграммы, найменее популярны и запретные - те которые не встречаются не разу (сойдёт текст на 10К символов).

не самый удачный путь, проще поискать статистику на спецелизированных сайтах, ибо статистика то во всех текстах выравнивается, но только при большом количестве текста. пример -- если взять две страницы учебника сопромата и столько же любовного романа -- статистика будет сильно различатся, но если взять по 10-20 книжек из этих областей -- статистика выравняется
PM MAIL   Вверх
ksili
Дата 15.9.2008, 16:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2069
Регистрация: 3.11.2005
Где: Красноярск

Репутация: 2
Всего: 17



Цитата(aleksh @  15.9.2008,  13:15 Найти цитируемый пост)
найти их место (ориентировочно) и вычислить алгоритм шифрования

алгоритм шифрования уже известен - это шифр замены

Цитата(aleksh @  15.9.2008,  13:15 Найти цитируемый пост)
если взять две страницы учебника сопромата и столько же любовного романа -- статистика будет сильно различатся

сильно/не сильно - это как повезет. Я вот наоборот думаю, что сильно они не будут отличаться. Хотя отличаться конечно будут


--------------------
Ничто так не развивает аналитическое мышление, как отладка сложной программы без возможности пошагового выполнения (с)
PM MAIL   Вверх
aleksh
Дата 15.9.2008, 17:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 609
Регистрация: 8.7.2008

Репутация: нет
Всего: 13



Цитата(ksili @  15.9.2008,  16:57 Найти цитируемый пост)
алгоритм шифрования уже известен - это шифр замены

под алгоритмом подразумевалось -- по какому принципу замена осуществляется

PM MAIL   Вверх
v2v
Дата 15.9.2008, 20:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1620
Регистрация: 20.9.2006
Где: Киев

Репутация: нет
Всего: 56



Цитата(aleksh @  15.9.2008,  17:19 Найти цитируемый пост)
по какому принципу замена осуществляется

это ключ, а не алгоритм.
Цитата(aleksh @  15.9.2008,  09:15 Найти цитируемый пост)
проще поискать статистику 

я затем и предложил такой метод , потому что статистику найти не удалось.


--------------------
PM   Вверх
aleksh
Дата 15.9.2008, 20:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 609
Регистрация: 8.7.2008

Репутация: нет
Всего: 13



Цитата(v2v @  15.9.2008,  20:03 Найти цитируемый пост)
это ключ, а не алгоритм.

верно, виноват
Цитата(v2v @  15.9.2008,  20:03 Найти цитируемый пост)
я затем и предложил такой метод , потому что статистику найти не удалось.

странно, надо будет поискать...
но все равно -- текст надо брать большой
PM MAIL   Вверх
spin2
Дата 16.9.2008, 17:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 598
Регистрация: 15.12.2005
Где: Москва-Одесса

Репутация: нет
Всего: 31



А закодированный текст большой? Вам нужно именно автоматическую обработку сделать или это неважно?


--------------------
"С кем тяжело молчать, с тем не о чем говорить" (Метерлинк)
блог
Все об ICQ-ботах
PM MAIL WWW ICQ Skype Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Алгоритмы"

maxim1000

Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Алгоритмы | Следующая тема »


 




[ Время генерации скрипта: 0.0567 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.