Шифрование методом перестановки

Автор работы: Пользователь скрыл имя, 23 Мая 2013 в 19:03, лабораторная работа

Описание работы

Цель:
Шифрование методом перестановки.
Метод заключается в том, что символы шифруемого текста переставляются по определенным правилам внутри шифруемого блока символов.
В данной работе будет рассматриваться перестановка с ключом. Необходимо знать ключ, например «радиатор».

Файлы: 1 файл

Шифрование методом перестановки.doc

— 87.50 Кб (Скачать файл)

Министерство  образования и науки Российской Федерации

Государственное образовательное учреждение

высшего профессионального  образования

«ВЛАДИМИРСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ

имени Александра Григорьевича и Николая Григорьевича Столетовых»

Кафедра «Вычислительная техника»

 

 

 

 

Лабораторная  работа № 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(AnsiString key)

{

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).AnsiCompareIC(word.SubString(j,1)) > 0) {

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, реализующий изученный метод. В завершение, был составлен отчет о проделанной работе.


Информация о работе Шифрование методом перестановки