МІНІСТЕРСТВО ОСВІТИ І НАУКИ, МОЛОДІ ТА СПОРТУ УКРАЇНИ
НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ «ЛЬВІВСЬКА ПОЛІТЕХНІКА»
ІКТА
кафедра БІТ
З В І Т
до лабораторної роботи №2
з курсу: «КРИПТОГРАФІЧНІ СИСТЕМИ ТА ПРОТОКОЛИ»
на тему: «ВИВЧЕННЯ ТА РЕАЛІЗАЦІЯ ШИФРІВ ПЕРЕСТАНОВКИ»
Мета роботи – навчитися розробляти програмне забезпечення для реалізації шифрів перестановки.
1. ЗАВДАННЯ
1.1. Домашня підготовка до роботи
1) Вивчити математичний апарат, який використовується в шифрах перестановки, а також принципи побудови матричного шифру обходу та шифру Кардано.
2) Скласти блок-схеми алгоритмів та програму для реалізації зашифрування та розшифрування відкритого тексту за допомогою шифру Кардано з періодом l=36.
1.2. Робота в лабораторії
1) Ввести в комп'ютер програми згідно із завданням.
2) Відлагодити програми. При необхідності скоригувати блок-схеми алгоритмів та програми у відповідності з виявленими логічними та синтаксичними помилками.
3) Остаточні версії блок-схем, програм та отримані результати оформити у звіті з лабораторної роботи.
4) Здати звіт з лабораторної роботи.
2. Блок-схема алгоритму програми
Функція main Функція повороту решітки на 900
Функція повороту решітки на 1800 Функція повороту решітки на 2700
3. Текст програми
#include <iostream.h>
#include <conio.h>
int main(int argc, char* argv[])
{
const int SIZE = 6;
char *buf[SIZE] = {"qwerty",
"asdfgh",
"zxcvbn",
"uiopkl",
"jm!uue",
"drftgy"}; // зашифрована матриця
int grid[SIZE][SIZE] ={{0, 0, 1, 0, 0, 1},
{0, 1, 0, 0, 0, 0},
{0, 1, 0, 1, 0, 0},
{0, 0, 0, 0, 0, 0},
{1, 0, 0, 1, 0, 1},
{0, 0, 1, 0, 0, 0}}; // решітка Кардано
for (int i = 0; i < SIZE; i++)
cout << buf[i] << endl;
cout << endl;
cout << "0:" << endl;
for (int i = 0; i < SIZE; i++)
for (int j = 0; j < SIZE; j++)
if (grid[i][j] == 1)
cout << buf[i][j];
cout << endl;
// поворот решітки на 90 градусів за годинниковою стрілкою
cout << "90:" << endl;
for (int i = 0; i < SIZE; i++)
for (int j = 0; j < SIZE; j++)
if (grid[SIZE-j-1][i] == 1)
cout << buf[i][j];
cout << endl;
// поворот решітки на 180 градусів за годинниковою стрілкою
cout << "180:" << endl;
for (int i = 0; i < SIZE; i++)
for (int j = 0; j < SIZE; j++)
if (grid[SIZE-i-1][SIZE-j-1] == 1)
cout << buf[i][j];
cout << endl;
// поворот решітки на 270 градусів за годинниковою стрілкою
cout << "270:" << endl;
for (int i = 0; i < SIZE; i++)
for (int j = 0; j < SIZE; j++)
if (grid[j][SIZE-i-1] == 1)
cout << buf[i][j];
cout << endl;
system("pause");
return 0;
getch();
}
5. Результати роботи програми
/