Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
7
Добавлен:
13.04.2015
Размер:
1.74 Кб
Скачать
//Тела функций
#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;
}
Соседние файлы в папке Программа