Добавил:
abhai2013@gmail.com Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ТА / Course.docx
Скачиваний:
37
Добавлен:
30.06.2018
Размер:
1.1 Mб
Скачать

Список литературы

1. А.В.Яковлев, А.А.Безбогов, В.В.Родин, В.Н.Шамкин. Криптографическая защита информации. – Тамбов:Из-во Тамб. Гос. Тех.. ун-та, 2006. – 140 с.

2. Ю.В.Романец, П.А.Тимофеев, В.Ф.Шаньгин. Защита информации в компьютерных системах и сетях./ под ред. В.Ф.Шаньгина – М.: Радио и свіязь, 2001. – 376с.

3. Остапов С.Е., Валь Л.О. Основи криптографії: Навчальний посібник. – Чернівці: Книга – ХХІ, 2008. – 188 с.

4. Б.Шнайер. Прикладная криптография. Протоколы, алгоритмы, исходные коды на языке С. 1996.

5. М.Масленников. Практическая криптография. БХВ-Петербург,2003. – 464с.

Приложение а

Листинг программы:

#include <iostream>

#include <time.h>

#include <windows.h>

using namespace std;

void main()

{

srand(time(NULL));

SetConsoleCP(1251);

SetConsoleOutputCP(1251);

char a, work = '1', alphabet[] = {'а','б', 'в', 'г', 'д', 'е', 'ё', 'ж', 'з', 'и', 'й', 'к', 'л', 'м', 'н', 'о', 'п', 'р', 'с', 'т', 'у', 'ф', 'х', 'ц', 'ч', 'ш', 'щ', 'ъ', 'ы', 'ь', 'э', 'ю', 'я', ',', ' ', '.', '\0'}; // массив русского алфавита

const int n = 6; // размерность квадратов

int x = 0, y = 0, i1 = 0, j1 = 0, i_text = 0; // индексы

char **square1 = new char*[n], **square2 = new char*[n]; // создание квадратов Уитстона и их строк

char* text = new char; // текст для шифрования или дешифрования

for (int i = 0; i < n; i++) // создание столбцов квадратов

{

square1[i] = new char[n];

square2[i] = new char[n];

for (int j = 0; j < n; j++)

{

square1[i][j] = ' ';

square2[i][j] = ' ';

}

}

for (int i = 0; i < strlen(alphabet); i++) // заполнение первого квадрата алфавитом

{

n:

x = rand()%n;

y = rand()%n;

if (square1[x][y] == ' ')

square1[x][y] = alphabet[i];

else goto n;

}

for (int i = 0; i < strlen(alphabet); i++) // заполнение второго квадрата алфавитом

{

m:

x = rand()%n;

y = rand()%n;

if (square2[x][y] == ' ')

square2[x][y] = alphabet[i];

else goto m;

}

cout << "Первый квадрта Уитстона" << endl;

for (int i = 0; i < n; i++)// вывод первого квадрата

{

for (int j = 0; j < n; j++)

cout << square1[i][j] << " ";

cout << endl;

}

cout << "Второй квадрта Уитстона" << endl;

for (int i = 0; i < n; i++)// вывод второго квадрата

{

for (int j = 0; j < n; j++)

cout << square2[i][j] << " ";

cout << endl;

}

while (work == '1')

{

cout << "Введите 1 для шифрования или 0 для дешифрования" << endl;

while (!(cin >> a) || (a != '1' && a != '0')) cout << "Неправильный ввод, повторите еще раз" << endl;

if (a == '1')

{

cout << "Введите сообщение для шифрования" << endl;

cin.get();

cin.getline(text, 100);

for (int i = 0; i < strlen(text); i++) // начало шифрования

for (int j = 0; j < n; j++)

for (int k = 0; k < n; k++)

if (i % 2 == 0) // разбивка сообщения на биграммы

{

if (text[i] == square1[j][k])

{

i1 = j;

j1 = k;

i_text = i;

}

}else if (text[i] == square2[j][k])

if (i1 != j) // замена биграммы при условии разных строк

{

text[i_text] = square2[i1][k];

text[i] = square1[j][j1];

j = n; k = n;

}

else // замена биграммы при условии одной строки

{

text[i_text] = square2[j][j1];

text[i] = square1[j][k];

j = n; k = n;

}

cout << text << endl; // вывод зашифрованного сообщения

}

else if (a == '0')

{

cout << "Введите сообщение для дешифрования" << endl;

cin.get();

cin.getline(text, 100);

for (int i = 0; i < strlen(text); i++) // начало дешифрования

for (int j = 0; j < n; j++)

for (int k = 0; k < n; k++)

if (i % 2 == 0) // разбивка сообщения на биграммы

{

if (text[i] == square2[j][k])

{

i1 = j;

j1 = k;

i_text = i;

}

}else if (text[i] == square1[j][k])

if (i1 != j) // замена биграммы при условии разных строк

{

text[i_text] = square1[i1][k];

text[i] = square2[j][j1];

j = n; k = n;

}

else // замена биграммы при условии одной строки

{

text[i_text] = square1[j][j1];

text[i] = square2[j][k];

j = n; k = n;

}

cout << text << endl; // вывод расшифрованного сообщения

}

cout << "Продожить работу?(1 - да, 0 - нет)" << endl;

while (!(cin >> work) || (work != '1' && work != '0')) cout << "Неправильный ввод, повторите еще раз" << endl;

}

system("pause");

}

23