Практические работы Часть 2 / Практическая работа 2 / Практическая работа 2 Отчет
.docxПрактическая работа №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;
}
}
}
Результат работы приложения: