ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 03.06.2024
Просмотров: 9
Скачиваний: 0
#include <iostream>
#include <string>
#include <conio.h>
#include <stdlib.h>
#include <sstream>
#include <fstream>
using namespace std;
int main()
{
int k; //Переменная выбора - шифрование/дешифрование
string result = ""; //Строка - результат
string key = ""; //Строка - ключ
string key_on_s = "";
bool flag;
int x = 0, y = 0; int registr = 0; //Регистр символа
char dublicat; //Дубликат прописной буквы
int shift = 0;
char **tabula_recta = new char *[27]; //Таблица Виженера
for (int i=0;i<27;i++)
tabula_recta[i] = new char [27];
string alfabet = " abcdefghijklmnopqrstuvwxyz"; //Алфавит латиницы
for (int i = 0; i < 27; i++)
for (int j = 0; j < 27; j++)
{
shift = j + i;
if (shift >= 27) shift = shift % 27;
tabula_recta[i][j] = alfabet[shift];
}k=1;
switch (k) //Если k
{
case 1: //Если выбрано шифрование
{
setlocale(LC_ALL,"Russian");
cout<<"Введите ключ\n";
cin>>key;
cout<<"Чтение файла...\n";
setlocale(LC_ALL,"Russian");//Чтение файла
string s; //Строка считанная из файла
ifstream in("1.txt");
getline(in,s);
cout<<"Текст в файле: \n"<<s<<endl;
in.close();
cout<<"Чтение завершено!\n";
cout<<"Шифрование...\n";
//Формирование строки, длиной шифруемой, состоящей из повторений ключа
for (int i = 0; i < s.length(); i++)
{
key_on_s += key[i % key.length()];
}
//Шифрование при помощи таблицы
for (int i = 0; i < s.length(); i++)
{
//Если нешифруемый символ
if (((int)(s[i]) < 65) || ((int)(s[i]) > 122))
result += s[i];
else
{
//Поиск в первом столбце строки, начинающейся с символа ключа
int l = 0;
flag = false;
while ((l < 27) && (flag == false))
{
if (key_on_s[i] == tabula_recta[l][0])
{
x = l;
flag = true;
}
l++;
} буквы
if (((int)(s[i]) <= 90) && ((int)(s[i]) >= 65))
{ dublicat = (char)((int)(s[i]) + 32);
registr = 1;
} else
{ registr = 0;
dublicat = s[i];
} l = 0;
flag = false;
while ((l < 27) && (flag == false))
{ if (dublicat == tabula_recta[0][l])
{
//Запоминаем номер столбца
y = l;
flag = true;
}
l++;
}
//Увеличиваем регистр буквы до прописной
if (registr == 1)
{
//Изменяем символ на первоначальный регистр
dublicat = char((int)(tabula_recta[x][y]) - 32);
result += dublicat;
}
else
result += tabula_recta[x][y];
}
}
for(int i=0;i<s.length();i++)
if(result[i]==' ')
result[i]='I';
cout<<result; //Вывод результата
break;
} }
getch();
return 0;
}