Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Практические работы Часть 2 / Практическая работа 2 / Практическая работа 2 Отчет

.docx
Скачиваний:
62
Добавлен:
24.07.2019
Размер:
139.81 Кб
Скачать

Практическая работа №2

Шифр Виженера

Цель: знакомство с методами криптографической защиты информации и с алгоритмами шифрования. Научить кодировать информацию с помощью «Шифра Виженера».

Ход работы

Задание 1.

Самостоятельная работа:

1)

2)

3)

4)

5)

6)

7)

Задание 2.

Листинг Form1.cs:

using System;

using System.Collections.Generic;

using System.Linq;

using System.Windows.Forms;

namespace WindowsFormsApplication1 {

public partial class Form1 : Form {

public Form1() {

InitializeComponent();

}

private void button1_Click_1(object sender, EventArgs e) => SetText(false);

private void button2_Click(object sender, EventArgs e) => SetText(true);

private void SetText(bool isEncrypt) {

Shifr s = new Shifr(TxtKey.Text);

string[] array;

if (isEncrypt) array = s.GetEncryptedTwo(TxtText.Text);

else array = s.GetDecryptionTwo(TxtText.Text);

TxtResult.Clear();

foreach (string ar in array) TxtResult.Text += ar + " ";

}

}

public class Shifr {

public List<char> Alphabit { get; set; }

public string Key { get; set; }

public Shifr(string key = "") {

Alphabit = new List<char>() {

'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'

};

Key = key;

}

public string[] GetEncryptedTwo(string text) {

int countAlphabit = Alphabit.Count();

int lengthKey = Key.Length;

string[] textArray = text.Split(' ');

string[] shifr = new string[textArray.Length];

for (int w = 0; w < textArray.Length; w++) {

textArray[w] = textArray[w].ToLower();

int n = textArray[w].Length;

string key = ChangeKey(Key, n, lengthKey);

string shifrString = "";

for (int i = 0; i < n; i++) {

int indexText = Alphabit.FindIndex(0, (ch) => ch == textArray[w][i]);

int indexKey = Alphabit.FindIndex(0, (ch) => ch == key[i]) + 1;

shifrString += Alphabit[(indexText + indexKey) % countAlphabit];

}

shifr[w] = shifrString;

}

return shifr;

}

public string[] GetDecryptionTwo(string shifr) {

int countAlphabit = Alphabit.Count();

int lengthKey = Key.Length;

string[] shifrArray = shifr.Split(' ');

string[] text = new string[shifrArray.Length];

for (int w = 0; w < shifrArray.Length; w++) {

shifrArray[w] = shifrArray[w].ToLower();

int n = shifrArray[w].Length;

ChangeKey(n, lengthKey);

string textString = "";

for (int i = 0; i < n; i++) {

int indexText = Alphabit.FindIndex(0, (ch) => ch == shifrArray[w][i]);

int indexKey = Alphabit.FindIndex(0, (ch) => ch == Key[i]) + 1;

textString += Alphabit[(indexText + (countAlphabit - indexKey)) % countAlphabit];

}

text[w] = textString;

}

return text;

}

private string ChangeKey(string key, int lengthWord, int lengthKey) {

string _key = key;

if (_key.Length < lengthWord) {

for (int i = _key.Length, j = 0; i < lengthWord; i++, j++) {

_key += _key[j];

if (_key[j] == _key[lengthKey]) j = 0;

}

}

else if (_key.Length > lengthWord) {

_key = _key.Remove(_key.Length - lengthWord);

}

return _key;

}

}

}

Результат работы приложения:

Соседние файлы в папке Практическая работа 2