Добавил:
Upload
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Metod_Vizhenera_savenkov_Ivan_Kn-1_2-Kurs / Программа / vigener functions
.cpp//Тела функций
#include "vigener.h"
#define max 26
#define ascii 97
Vigener::Vigener()
{
createAlp();
}
Vigener::~Vigener()
{
delete [] codeChar;
}
void Vigener::createAlp()
{
// Массив соответствий. Каждому индексу массива
// присваивается буква англ.алфавита.
codeChar=new char[max];
for (int i=0; i<max; i++)
{
codeChar[i]=char(ascii+i);
}
}
int Vigener::inNum(char ch)
{
int i=0;
while (codeChar[i]!=ch)
{
i++;
}
return i++;
}
char Vigener::inChar(int num)
{
return char(ascii+num);
}
string Vigener::keyWord(int size, string key)
{
string code;
for (int i=0; i<size/key.length(); i++)
{
code+=key;
}
for (int i=0; i<size%key.length(); i++)
{
code+=key.c_str()[i];
}
return code;
}
string Vigener::enCrytrion (string word, string key)
{
int size = word.length();
char *buf = new char[size];
string code, memory=key;
//-------------------------------------
//Создание ключевой строки для шифра
//-------------------------------------
size = word.length();
key=keyWord(size,key);
//-------------------------------------
//Шифрование сообщения
//-------------------------------------
int i=0;
while (size!=i)
{
code+=inChar((inNum(word.c_str()[i])+inNum(key.c_str()[i])) % 26);
i++;
}
//-------------------------------------
//Востановление ключа
key=memory;
return code;
}
string Vigener::deCrytrion (string word, string key)
{
string code, memory=key;
int size = word.length();
key=keyWord(size,key);
//Дешифровка
for (int i=0; i<size; i++)
{
code+=inChar((inNum( word[i]) - inNum(key[i]) + max ) % max);
}
//Востановление ключа
key=memory;
return code;
}
Соседние файлы в папке Программа