Download as docx, pdf, or txt
Download as docx, pdf, or txt
You are on page 1of 5

Київський національний університет імені Тараса Шевченка

Факультет інформаційних технологій


Кафедра кібербезпеки і захисту інформації

Лабораторна робота № 3
з дисципліни “Криптографічні системи захисту інформації ”

Київ 2020
Тема: Ознайомлення з методом шифрування даних «Шифр Віженера».

Мета: Знати та вміти використовувати метод шифрування даних «Шифр


Віженера»

Теоритичні відомості
Поліалфавітні підстановки маскують справжню частоту появи символів у шифрі, тому
вони значно надійніші як моно алфавітні. Однак, метод частотного аналізу можна
застосувати і для них. Шифр Віженера – полі алфавітна підстановка із використанням
одного алфавіту (кожна буква визначає свій алфавіт шифрування). Також цю
криптосистему можна розглядати як шифр гамування із використанням періодичної
гами малого періоду.

Хід роботи
string[] abc = new string[] { "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n",
"o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z" };
string phrase = "";
string key1 = "";
string endcodephrase = "";

Console.Write("Encrypt ot Decrypt?(enc/dec): ");


string check = Console.ReadLine();

switch(check)
{
case "enc":
Console.Write("Enter phrase for Encrypt: ");
phrase = Console.ReadLine();
Console.Write("Enter key word: ");
key1 = Console.ReadLine();

CheckKey(key1);
endcodephrase = Encrypt(phrase, key1);
Console.WriteLine(endcodephrase);

break;
case "dec":
Console.Write("Enter phrase for Decrypt: ");
phrase = Console.ReadLine();
Console.Write("Enter key word: ");
key1 = Console.ReadLine();

CheckKey(key1);
endcodephrase = Decrypt(phrase, key1);
Console.WriteLine(endcodephrase);

break;
}

void CheckKey(string key)


{
bool check1 = false;
int check2 = 0;
for (int i = 0; i < key.Length; i++)
{
for (int j = 0; j < abc.Length; j++)
{
if(Convert.ToString(key[i]) == abc[j])
{
check2 += 1;
}
}

}
if (check2 == key.Length)
{
Console.WriteLine("Key is good!");
}
else
{
Console.WriteLine("Key isn`t correct, try again!");
Console.WriteLine("Enter key word: ");
key1 = Console.ReadLine();
CheckKey(key1);
}
}

string Encrypt(string phrase1, string key)


{
char[] charkey = key.ToCharArray();
char[] charphrase1 = phrase1.ToCharArray();
int inkey = 0;
int pos = 0;
int j = 0;
int dec = 0;

for (int i = 0; i < charphrase1.Length; i++)


{
string a1 = Convert.ToString(charphrase1[i]);
pos = Array.IndexOf(abc, a1);

if(pos >= 0)
{
if (j >= key.Length - 1)
{
string a = Convert.ToString(charkey[j]);
//Console.WriteLine("string a = " + a);
inkey = Array.IndexOf(abc, a);
j = 0;
}
else
{
string a = Convert.ToString(charkey[j]);
//Console.WriteLine("string a = " + a);
inkey = Array.IndexOf(abc, a);
j++;
}
Console.WriteLine("inkey: " + inkey);

Console.WriteLine("pos: " + pos);


dec = (abc.Length + pos + inkey) % abc.Length;
if (dec < 0)
{
dec = abc.Length + dec;
}
Console.WriteLine("dec: " + dec);
charphrase1[i] = Convert.ToChar(abc[dec]);
}

phrase1 = new string(charphrase1);


return phrase1;
}

string Decrypt(string phrase1, string key)


{
char[] charkey = key.ToCharArray();
char[] charphrase1 = phrase1.ToCharArray();
int inkey = 0;
int j = 0;
int dec = 0;
int pos = 0;

for (int i = 0; i < charphrase1.Length; i++)


{
string a1 = Convert.ToString(charphrase1[i]);
pos = Array.IndexOf(abc, a1);

if (pos >= 0)
{
if (j >= key.Length - 1)
{
string a = Convert.ToString(charkey[j]);
//Console.WriteLine("string a = " + a);
inkey = Array.IndexOf(abc, a);
j = 0;
}
else
{
string a = Convert.ToString(charkey[j]);
//Console.WriteLine("string a = " + a);
inkey = Array.IndexOf(abc, a);
j++;
}
Console.WriteLine("inkey: " + inkey);

Console.WriteLine("pos: " + pos);


dec = (abc.Length + pos - inkey) % abc.Length;
if (dec < 0)
{
dec = abc.Length + dec;
}
Console.WriteLine("dec: " + dec);
charphrase1[i] = Convert.ToChar(abc[dec]);
}
}

phrase1 = new string(charphrase1);


return phrase1;
}

Висновок: В цій лабораторній роботі, було ознайомлено з методом шифрування


даних «Шифр Віженера», та написано програму для шифрування за допомогою метода
«Шифр Віженера», де було реалізовано шифрування так і дешифрування. Також
зроблена перевірка ключа на наявність символів, які не містяться в масиві даних.

You might also like