|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
07.03.2013, 01:38 | #1 |
Новичок
Джуниор
Регистрация: 07.03.2013
Сообщений: 3
|
Генетические алгоритмы в криптографии
Здравствуйте! Передо мною стала проблема реализации генетическиого алгоритма для определения длинны ключа и дешифрования перестановочного шифтра.(Ссылаюсь на одноименную работу Алексея Городилова и Владимира Морозенка). В чем собственно проблема?..как реализовать ген алгоритм сам по себе-ну разобралась кое-как,как написать несложный код для дешифровки текста-не проблема..но вот как соединить воедино то и то...паника..я растерялась. В генетическом алгоритме целевая функция берет в основу перестановочный шифр Якобсена. Если кто-то когда-то с подобным сталкивался, помогите пожалуйста, подскажите. Буду действительно очень благодарна!
|
07.03.2013, 12:25 | #2 | |
Старожил
Регистрация: 25.10.2011
Сообщений: 3,178
|
Цитата:
|
|
10.03.2013, 00:22 | #3 |
Новичок
Джуниор
Регистрация: 07.03.2013
Сообщений: 3
|
я имела ввиду, например, вот такое:
// Шифр.cpp: определяет точку входа для консольного приложения. // #include "stdafx.h" #include <string> #include <iostream> void permutationcode(std::string& text, std::string& const key) { int col = key.size(); int row = (text.size() % col) ? ((text.size() / col) + 1) : (text.size() / col); int** arrtext = new int*[row]; for (int i = 0; i < row; ++i) arrtext[i] = new int[col]; //inizialization array {0} for (int i = 0; i < row; ++i) for (int j = 0; j < col; ++j) arrtext[i][j] = 0; //fill array {text[i]} for (int i = 0; i < row; ++i) for (int j = 0; j < col; ++j) arrtext[i][j] = text[(i*col)+j]; int index = 0; //permutation for (int i = 0; i < 256; ++i) for (int j = 0; j < col; ++j) if (key[j] == i) for (int k = 0; k < row; ++k,++index) text[index] = arrtext[k][j]; for (int i = 0; i < row; ++i) delete[] arrtext[i]; delete[] arrtext; } void permutationdecode(std::string& text, const std::string& const key) { int col = key.size(); int row = (text.size() % col) ? ((text.size() / col) + 1) : (text.size() / col); int** arrtext = new int*[row]; for (int i = 0; i < row; ++i) arrtext[i] = new int[col]; //inizialization array {0} for (int i = 0; i < row; ++i) for (int j = 0; j < col; ++j) arrtext[i][j] = 0; //fill array {text[i]} for (int i = 0; i < row; ++i) for (int j = 0; j < col; ++j) arrtext[i][j] = text[(j*row)+i]; int index = 0; //decode for (int i = 0; i < row; ++i){ for (int k = 0; k < 256; ++k){ for (int j = 0; j < col; ++j){ if (key[j] == k){ text[index] = arrtext[i][j]; ++index; break; } } } } for (int i = 0; i < row; ++i) delete[] arrtext[i]; delete[] arrtext; } int _tmain(int argc, _TCHAR* argv[]) { std::string text("Hello programmers!"); std::string key("bac"); std::cout << "Text before: " << text << std::endl << std::endl; permutationcode(text,key); std::cout << "Coded text: " << text << std::endl << std::endl; permutationdecode(text,key); std::cout << "Decoded text: " << text; std::cin.get(); std::cin.get(); return 0; } |
10.03.2013, 00:29 | #4 |
Новичок
Джуниор
Регистрация: 07.03.2013
Сообщений: 3
|
В 1995 году Томас Якобсен предложил автоматический метод раскрытия ключа простых (как моно-, так и полиалфавитных) шифров замены и в своей статье даже привел реализацию алгоритма его работы. (Это относительно целевой функции генетического влгоритма). Она, как я поняла, строиться на основе шифра Якобсена.
Очень хорошо описано алгоритм вот здесь: http://www.chhm.net/index.php?articles=73 По этому вопросу мне было трудно найти достаточно литературы..в основном она на английском..Читала Делман,но это мало мне чем помогло.. |
10.03.2013, 20:37 | #5 |
Старожил
Регистрация: 25.10.2011
Сообщений: 3,178
|
Известный источник путаницы: decoding, decrypting - это расшифровывание, процесс, предполагающий, что у нас есть ключ. А дешифрирование (когда код есть, а ключа нет) - это breaking, hacking и так далее.
Во-вторых, речь в статье идёт не о шифре перестановки, а о шифре замены. Это, как говорится, "две большие разницы". В статье мы отталкиваемся от некоторых естественных особенностей открытого текста и считаем, что шифр взломан, если подобран такой ключ, что расшифрованный текст "достаточно сильно" обладает такими особенностями (точнее, порождается последовательность открытых текстов, каждый из которых является "более естественным", чем предыдущий). Обратите внимание, что истинного открытого текста мы при этом можем не получить никогда. Можно попробовать тот же подход, но для генетического алгоритма жизненно важно уметь "слабо" модифицировать ключ, а желательно ещё и "сливать" пару ключей так, чтобы получать новый ключ, при некоторых дополнительных условиях дающий текст "не хуже", чем у своих "родителей". Если бы речь шла об обычной перестановке, на роль "слабой" модификации годился бы обмен местами одной пары позиций, а слияние можно было бы осуществлять, основываясь на цикловой структуре перестановок. Однако используемый Вами приём с заданием перестановки с помощью строки я не вполне понимаю (и подозреваю, что Вы проделываете объективно лишние действия). |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Генетические алгоритмы [Поиск Литературы] | MooNDeaR | Свободное общение | 1 | 17.01.2012 23:41 |
Задача из раздела Комбинаторные алгоритмы и алгоритмы на гра-фах в Паскале | Klik_1602 | Помощь студентам | 1 | 04.01.2011 01:18 |
программа для лабораторной работы "Генетические алгоритмы" | maximp | Фриланс | 2 | 11.11.2010 20:14 |
Алгоритмы КРИПТОГРАФИИ, СТЕГАНОГРАФИИ | Dima_Dima | Общие вопросы Delphi | 3 | 31.05.2010 19:13 |
Нейронная сеть+генетические алгоритмы. | gusluk | Софт | 0 | 22.04.2009 07:58 |