ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 07.06.2019
Просмотров: 130
Скачиваний: 1
Лабораторная работа № 2
(№ 9 по списку и инд.вариант t= 0)
Студента ИТ-14-1
Красовского Абхая
Тема: Шифрование методами сложной замены
Цель: Научиться разрабатывать алгоритмы (программы) для шифрования методами сложной замены
Задание
-
№ вар.
Описание шифра
Ограничения
1
Система шифрования Вижинера
Использовать числовой ключ длиной не менее 10 чисел
Фраза для шифрования: Я ДЕЛАЮ ЛАБОРАТОРНУЮ
Ключ: 3857491047
Шифровка:
А 1 |
Б 2 |
В 3 |
Г 4 |
Д 5 |
Е 6 |
ё 7 |
Ж 8 |
З 9 |
И 10 |
й 11 |
К 12 |
Л 13 |
М 14 |
Н 15 |
О 16 |
П 17 |
Р 18 |
С 19 |
Т 20 |
У 21 |
Ф 22 |
Х 23 |
Ц 24 |
Ч 25 |
Ш 26 |
Щ 27 |
Ъ 28 |
Ы 29 |
Ь 30 |
Э 31 |
Ю 32 |
Я 33 |
- |
- |
Я |
Д |
Е |
Л |
А |
Ю |
Л |
А |
Б |
О |
Р |
А |
Т |
О |
Р |
Н |
У |
Ю |
|
3 |
8 |
5 |
7 |
4 |
9 |
1 |
0 |
4 |
7 |
3 |
8 |
5 |
7 |
4 |
9 |
1 |
0 |
|
В |
Л |
Й |
Т |
Д |
Ж |
М |
А |
Е |
Х |
У |
З |
Ч |
Х |
Ф |
Ц |
Ф |
Ю |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Дешифровка:
В |
Л |
Й |
Т |
Д |
Ж |
М |
А |
Е |
Х |
У |
З |
Ч |
Х |
Ф |
Ц |
Ф |
Ю |
|
3 |
8 |
5 |
7 |
4 |
9 |
1 |
0 |
4 |
7 |
3 |
8 |
5 |
7 |
4 |
9 |
1 |
0 |
|
Я |
Д |
Е |
Л |
А |
Ю |
Л |
А |
Б |
О |
Р |
А |
Т |
О |
Р |
Н |
У |
Ю |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Программа:
Код:
#include <iostream>
#include <conio.h>
#include <Windows.h>
using namespace std;
void main()
{
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
char a[33] = {'а','б','в','г','д','е','ё','ж','з','и','й','к','л','м','н','о','п','р','с','т','у','ф','х','ц','ч','ш','щ','ъ','ы','б','э','ю','я'};
int b = 0, n = 0;
char* str = new char[100];
char* string2 = new char[100];
cout << "Введите количество цифр в ключе" << endl;
cin >> n;
int* key = new int[100];
cout << "Введите ключ(каждая цифра через пробел)" << endl;
for (int i = 0; i < n; i++)
while(!(cin >> key[i]) || key[i] < 0 || key[i] > 33);
cout << "Введите 1 для шифрования текста или 0 для его расшифровки" << endl;
cin >> b;
if (b == 0)
{
cout << "Введите текст для расшифровки" << endl;
cin >> string2;
for (int i = n; i < strlen(string2); i++)
key[i] = key[i - n];
for(int i = 0; i < strlen(string2); i++)
{
for (int j = 0; j < 33; j++)
if (string2[i] == a[j])
{
if ((j-key[i]) < 0) string2[i] = a[33 + (j - key[i])];
else string2[i] = a[j-key[i]];
break;
}
}
cout << "Ваш расшифрованный текст" << endl;
cout << string2;
}
else
{
cout << "Введите текст для шифрования" << endl;
cin >> str;
for (int i = n; i < strlen(str); i++)
key[i] = key[i - n];
for(int i = 0; i < strlen(str); i++)
{
for (int j = 0; j < 33; j++)
if (str[i] == a[j])
{
if ((j+key[i]) > 33) str[i] = a[(j + key[i])- 33];
else str[i] = a[j+key[i]];
break;
}
}
cout << "Ваш зашифрованный текст" << endl;
cout << str;
}
delete[] str;
delete[] string2;
delete[] key;
_getch();
}
Р узультат:
Вывод: Научился разрабатывать алгоритмы (программы) для шифрования методами сложной замены