Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Лаб. раб 2

.docx
Скачиваний:
27
Добавлен:
20.06.2021
Размер:
159.95 Кб
Скачать

Министерство Образования и Науки Кыргызской Республики

Кыргызский Государственный Технический Университет

им. И. Раззакова

Отчет

По дисциплине: Криптография

Бишкек 2020 год

Лабораторная работа №2

Шифр по квадрату Полибия

«Квадрат Полибия» представляет собой квадрат 6x6. В каждую клетку этого квадрата записывается одна буква (в нашем алфавите 31 букв и 5 символов, Й и Ё исключены. Буквы расположены в алфавитном порядке. В результате каждой букве соответствует пара чисел, и шифрованное сообщение превращается в последовательность пар чисел. Расшифровывается путём нахождения буквы, стоящей на пересечении строки и столбца.

Сообщение преобразуется в координаты по квадрату Полибия, координаты записываются вертикально:

Буква

Т

У

Т

П

О

Я

В

И

Т

С

Я

П

О

Р

Т

Р

Е

Т

П

О

Л

И

Б

И

Я

Координата вертикальная:

3

4

3

3

3

6

1

2

3

3

6

3

3

3

3

3

1

3

3

3

2

2

1

2

6

Координата горизонтальная:

6

1

6

3

2

1

3

3

6

5

1

3

2

4

6

4

6

6

3

2

5

3

2

3

1

Затем координаты считывают по строкам:

36 41 36 33 32 61 13 23 36 35 61 33 32 34 36 34 16 36 33 32 25 23 12 23 61

Результат работы

Рис1. Приветствие программы

Рис 2. Результат

Рис 3. Сам Полибий (автор)

Реализация квадрата Полибия на С++

int main()

{

setlocale(LC_ALL, "russian");

system("chcp 1251");

system("cls");

{

char *string = new char[36];

const int m = 6;

const int n = 6;

int i, j;

cout << "Здравствуйте, это шифр квадрата Полибия" << endl;

char A[m][n] = {{'А', 'Б', 'В', 'Г', 'Д', 'Е' },

{'Ж', 'З', 'И', 'К', 'Л', 'М' },

{'Н', 'О', 'П', 'Р', 'С', 'Т' },

{'У', 'Ф', 'Х', 'Ц', 'Ч', 'Ш' },

{'Щ', 'Ъ', 'Ы', 'Ь','Э', 'Ю' },

{'Я', '.', ',', '?', ';', ':' }};

for (int i = 0; i < m; i++)

{

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

{

cout << setw(2) << A[i][j] << ' ';

}

cout << endl;

}

cout << "Введите слово : ";

cin >> string;

for (int k = 0; k < strlen(string); k++)

{

for (i = 0; i < m; i++)

{

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

{

if (string[k] == A[i][j])

{

cout << i + 1 << j + 1 << setw(2);

}

}

}

}

cout << endl;

}

system("pause");

return 0;

}