Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 07.03.2013, 01:38   #1
12345ab
Новичок
Джуниор
 
Регистрация: 07.03.2013
Сообщений: 3
По умолчанию Генетические алгоритмы в криптографии

Здравствуйте! Передо мною стала проблема реализации генетическиого алгоритма для определения длинны ключа и дешифрования перестановочного шифтра.(Ссылаюсь на одноименную работу Алексея Городилова и Владимира Морозенка). В чем собственно проблема?..как реализовать ген алгоритм сам по себе-ну разобралась кое-как,как написать несложный код для дешифровки текста-не проблема..но вот как соединить воедино то и то...паника..я растерялась. В генетическом алгоритме целевая функция берет в основу перестановочный шифр Якобсена. Если кто-то когда-то с подобным сталкивался, помогите пожалуйста, подскажите. Буду действительно очень благодарна!
12345ab вне форума Ответить с цитированием
Старый 07.03.2013, 12:25   #2
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Цитата:
как написать несложный код для дешифровки текста-не проблема...
Именно для дешифровки, а не расшифровки? Можете привести?..
Abstraction вне форума Ответить с цитированием
Старый 10.03.2013, 00:22   #3
12345ab
Новичок
Джуниор
 
Регистрация: 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;
}
12345ab вне форума Ответить с цитированием
Старый 10.03.2013, 00:29   #4
12345ab
Новичок
Джуниор
 
Регистрация: 07.03.2013
Сообщений: 3
По умолчанию

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

Очень хорошо описано алгоритм вот здесь:
http://www.chhm.net/index.php?articles=73

По этому вопросу мне было трудно найти достаточно литературы..в основном она на английском..Читала Делман,но это мало мне чем помогло..
12345ab вне форума Ответить с цитированием
Старый 10.03.2013, 20:37   #5
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Известный источник путаницы: decoding, decrypting - это расшифровывание, процесс, предполагающий, что у нас есть ключ. А дешифрирование (когда код есть, а ключа нет) - это breaking, hacking и так далее.

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

Можно попробовать тот же подход, но для генетического алгоритма жизненно важно уметь "слабо" модифицировать ключ, а желательно ещё и "сливать" пару ключей так, чтобы получать новый ключ, при некоторых дополнительных условиях дающий текст "не хуже", чем у своих "родителей". Если бы речь шла об обычной перестановке, на роль "слабой" модификации годился бы обмен местами одной пары позиций, а слияние можно было бы осуществлять, основываясь на цикловой структуре перестановок. Однако используемый Вами приём с заданием перестановки с помощью строки я не вполне понимаю (и подозреваю, что Вы проделываете объективно лишние действия).
Abstraction вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Генетические алгоритмы [Поиск Литературы] 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