Лаб. раб 2
.docxМинистерство Образования и Науки Кыргызской Республики
Кыргызский Государственный Технический Университет
им. И. Раззакова
Отчет
По дисциплине: Криптография
Бишкек 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;
}