Автор работы: Пользователь скрыл имя, 23 Мая 2013 в 19:03, лабораторная работа
Цель:
Шифрование методом перестановки.
Метод заключается в том, что символы шифруемого текста переставляются по определенным правилам внутри шифруемого блока символов.
В данной работе будет рассматриваться перестановка с ключом. Необходимо знать ключ, например «радиатор».
Министерство образования и науки Российской Федерации
Государственное образовательное учреждение
высшего профессионального образования
«ВЛАДИМИРСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ
имени Александра Григорьевича и Николая Григорьевича Столетовых»
Кафедра «Вычислительная техника»
Лабораторная работа № 2
по дисциплине
«Методы и средства защиты информации»
Выполнил:
ст. гр. ВТ - 107
М.А. Корнилов
Принял:
С.В. Маскеев
Владимир 2011
Цель:
Шифрование методом перестановки.
Описание метода:
Метод заключается в том, что символы шифруемого текста переставляются по определенным правилам внутри шифруемого блока символов.
В данной работе будет рассматриваться перестановка с ключом. Необходимо знать ключ, например «радиатор». В соответствии с расположением букв в алфавите буква А получает номер 1, вторая буква А -2, следующая по алфавиту буква Д – 3, потом И – 4, О – 5, первая буква Р – 6, вторая Р – 7 и буква Т – 8. Получим:
Р А Д И А Т О Р
6 1 3 4 2 8 5 7
п у с т ь б у д
е т т а к к а к
м ы х о т е л и
о
Тогда записывая столбики в соответствии с номерами букв ключа получим:
уты ькт стх тао уал пемо дки бке
Ход работы:
Листинг программы:
//----------------------------
#include "MReversion.h"
// шифрование сообщения
AnsiString MReversion::encode(AnsiString msg, AnsiString key)
{
// еслли ключ или сообщение пустые, то смысла шифрования нет
if ((key == NULL) || (msg == NULL)) {
return msg;
}
// дополнение сообщения символами для корректной дешифровки
while (msg.Length() % key.Length() != 0)
{
msg += "`";
}
AnsiString result;
// Создаем объект класса CoolHelper
CoolHelper* ch = new CoolHelper(key);
int ind;
int add = key.Length();
int len = msg.Length();
// Процесс шифрования сообщения
while ((ind = ch->getNextID()) != -1)
{
while (ind <= len)
{
result += msg.SubString(ind, 1);
ind += add;
}
}
delete ch;
return result;
}
// расшифровка сообщения
AnsiString MReversion::decode(AnsiString msg, AnsiString key)
{
int ind;
CoolHelper* ch = new CoolHelper(key);
AnsiString result = "";
int* mass_id = new int[key.Length()];
int i = 0;
while ((ind = ch->getRealID()) != -1)
{
mass_id[i++] = (ind - 1) * (msg.Length() / key.Length());
}
for (int i = 1; i <= (msg.Length() / key.Length()); i++)
{
for (int j = 0; j < key.Length(); j++)
{
AnsiString tmp;
if ((tmp = msg.SubString(mass_id[j] + i, 1)) != "`")
result += tmp;
}
}
delete ch;
delete[] mass_id;
return result;
}
// конструктор класса CollHelper
CoolHelper::CoolHelper(
{
this->word = key;
this->_key = key;
cnt = 0;
num = 1;
SIZE = word.Length(); // размер алфавита
this->mass_ind = new int[SIZE];
for (int i = 0; i < SIZE; i++) {
mass_ind[i] = i + 1;
}
this->sort();
}
// сортировка индексов ключа по возрастанию
void CoolHelper::sort()
{
for (int i = 1; i < SIZE; i++) {
for (int j = i + 1; j <= SIZE; j++) {
if (word.SubString(i,1).
AnsiString tmp = word[i];
word[i] = word[j];
word[j] = tmp[1];
int t = mass_ind[i - 1];
mass_ind[i - 1] = mass_ind[j - 1];
mass_ind[j - 1] = t;
}
}
}
}
// получение индекса следующего столбца для вывода на экран
// в качестве шифрованной
int CoolHelper::getNextID()
{
if (cnt <= SIZE) {
return mass_ind[cnt++];
}
else
return -1;
}
// получение номера столбца по порядку для дешифровки текста
int CoolHelper::getRealID()
{
for (int i = 0; i < SIZE; i++)
{
if (mass_ind[i] == num)
{
num++;
return i + 1;
}
}
num = 1;
return -1;
}
// деструктор
CoolHelper::~CoolHelper()
{
if (mass_ind)
delete[] mass_ind; // удаляем из памяти массив
}
Задание:
Зашифровать методом перестановки следующий текст:
Двадцать первое. Ночь. Понедельник. Очертанья столицы во мгле. Сочинил же какой-то бездельник, что бывает любовь на земле. И от лености или от скуки все поверили, так и живут: ждут свиданий, боятся разлуки и любовные песни поют.
При зашифровывании использовать ключ: «головоломка»;
Решение:
Вывод:
В ходе лабораторной работы был изучен метод шифрования перестановкой. Был составлен программный модуль, содержащий класс MReversion, реализующий изученный метод. В завершение, был составлен отчет о проделанной работе.