Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Collections.Generic;
- using System.ComponentModel;
- using System.Data;
- using System.Drawing;
- using System.Linq;
- using System.Text;
- using System.Windows.Forms;
- using System.Text.RegularExpressions;
- namespace Playfair_code
- {
- public partial class Form1 : Form
- {
- public Form1()
- {
- InitializeComponent();
- }
- //матрица алфавита шифрования
- private int encriptionMatrixX = 0;
- private int encriptionMatrixY = 0;
- private string[,] encriptionMatrix /*=
- {
- {"А", "Ч", "Б", "М", "Ц", "В"}, //первая строка матрицы
- {"Ь", "Г", "Н", "Ш", "Д", "О"}, //вторая строка матрицы
- {"Е", "Щ", ",", "Х", "У", "П"}, //третья строка матрицы
- {".", "З", "Ъ", "Р", "И", "Й"}, //четвертая строка матрицы
- {"С", "-", "К", "Э", "Т", "Л"}, //пятая строка матрицы
- {"Ю", "Я", " ", "Ы", "Ф", "Ж"} //шестая строка матрицы
- }*/;
- private string text; //исходный текст для шифрования
- private int i_first = 0, j_first = 0; //координаты первого символа пары
- private int i_second = 0, j_second = 0;//координаты второго символа пары
- private string s1 = "", s2 = ""; //строки для хранения зашифрованного символа
- private string encodetString; //зашифрованая строка
- private string decodetString; //расшифрованная строка
- #region Кодирование текста
- private void button1_Click(object sender, EventArgs e)
- {
- text = "";
- encodetString = "";
- text = Convert.ToString(richTextBox1.Text).ToUpper();
- int t = text.Length; //длина входного слова
- int i, j;
- ///проверяем, четное ли число символов в строке
- int temp = t % 2;
- if (temp != 0) //если нет
- { //то добавляем в конец строки символ " "
- text = text.PadRight((t + 1), ' ');
- }
- int len = text.Length / 2; /*длина нового массива -
- равная половине длины входного слова
- т.к. в новом масиве каждый элемент будет
- содержать 2 элемента из старого массива*/
- string[] str = new string[len]; //новый массив
- int l = -1; //служебная переменная
- for (i = 0; i < t; i += 2) //в старом массиве шаг равен 2
- {
- l++; //индексы для нового массива
- if (l < len)
- {
- //Элемент_нового_массива[i] = Элемент_старого_массива[i] + Элемент_старого_массива[i+1]
- str[l] = Convert.ToString(text[i]) + Convert.ToString(text[i + 1]);
- }
- }
- ///координаты очередного найденного символа из каждой пары
- foreach (string both in str)
- {
- for (i = 0; i < encriptionMatrixX; i++)
- {
- for (j = 0; j < encriptionMatrixY; j++)
- {
- //координаты первого символа пары в исходной матрице
- if (both[0] == Convert.ToChar(encriptionMatrix[i, j]))
- {
- i_first = i;
- j_first = j;
- }
- //координаты второго символа пары в исходной матрице
- if (both[1] == Convert.ToChar(encriptionMatrix[i, j]))
- {
- i_second = i;
- j_second = j;
- }
- }
- }
- ///если пара символов находится в одной строке
- if (i_first == i_second)
- {
- if (j_first == encriptionMatrixY - 1) /*если символ последний в строке,
- кодируем его первым символом из матрицы*/
- {
- s1 = Convert.ToString(encriptionMatrix[i_first, 0]);
- }
- //если символ не последний, кодируем его стоящим справа от него
- else
- {
- s1 = Convert.ToString(encriptionMatrix[i_first, j_first + 1]);
- }
- if (j_second == encriptionMatrixY - 1) /*если символ последний в строке
- кодируем его первым символом из матрицы*/
- {
- s2 = Convert.ToString(encriptionMatrix[i_second, 0]);
- }
- //если символ не последний, кодируем его стоящим справа от него
- else
- {
- s2 = Convert.ToString(encriptionMatrix[i_second, j_second + 1]);
- }
- }
- ///если пара символов находится в одном столбце
- if (j_first == j_second)
- {
- if (i_first == encriptionMatrixX - 1)
- {
- s1 = Convert.ToString(encriptionMatrix[encriptionMatrixX, j_first]);
- }
- else
- {
- s1 = Convert.ToString(encriptionMatrix[i_first + 1, j_first]);
- }
- if (i_second == encriptionMatrixX - 1)
- {
- s2 = Convert.ToString(encriptionMatrix[encriptionMatrixX, j_second]);
- }
- else
- {
- s2 = Convert.ToString(encriptionMatrix[i_second + 1, j_second]);
- }
- }
- ///если пара символов находиться в разных столбцах и строках
- if (i_first != i_second && j_first != j_second)
- {
- s1 = Convert.ToString(encriptionMatrix[i_first, j_second]);
- s2 = Convert.ToString(encriptionMatrix[i_second, j_first]);
- }
- if (s1 == s2)
- {
- encodetString = encodetString + s1 + "=" + s2;
- }
- else
- {
- //записыавем результат кодирования
- encodetString = encodetString + s1 + s2;
- }
- richTextBox2.Text = encodetString.ToLower();
- }
- }
- #endregion
- private void updateMatrix(int x, int y, string s) {
- s = s.Replace(" ", "").Replace("\n", "").Replace("\t", "");
- s = " " + s;
- encriptionMatrixX = x;
- encriptionMatrixY = y;
- encriptionMatrix = new string[x, y];
- for (int i = 0; i < x; i++) {
- for (int j = 0; j < y; j++) {
- encriptionMatrix[i, j] = s[i * y + j] + "";
- }
- }
- }
- private void button3_Click(object sender, EventArgs e)
- {
- int x = Convert.ToInt32(textBox1.Text);
- int y = Convert.ToInt32(textBox2.Text);
- updateMatrix(x, y, richTextBox3.Text);
- int count = 0;
- //if (login == "root" && pass == "qwerty")
- //{
- // Show matrix
- richTextBox3.Text += "\n";
- foreach (string s in encriptionMatrix)
- {
- count++;
- if (count != encriptionMatrixX)
- {
- richTextBox3.Text += s + "\t";
- }
- if (count == encriptionMatrixX)
- {
- richTextBox3.Text += s + "\t\n";
- count = 0;
- }
- }
- // end Show matrix
- //}
- //else
- //{
- // MessageBox.Show("Неверный логин и пароль", "Ошибка инициализации", MessageBoxButtons.OK, MessageBoxIcon.Warning);
- //}
- }
- private void button4_Click(object sender, EventArgs e)
- {
- richTextBox3.Clear();
- textBox2.Clear();
- }
- #region Раскодирование текста
- private void button2_Click_1(object sender, EventArgs e)
- {
- decodetString = "";
- string tempString = ""; //переменная для хранения строки подлежащей расшифровке
- int i, j;
- //удаляем символы "-" из зашифрованной строки
- for (i = 0; i < encodetString.Length; i++)
- {
- if (encodetString[i] != '=')
- {
- tempString = tempString + encodetString[i].ToString();
- }
- }
- //MessageBox.Show(tempString);
- int len = tempString.Length / 2; /*длина нового массива -
- равная половине длины входного слова
- т.к. в новом масиве каждый элемент будет
- содержать 2 элемента из старого массива*/
- string[] str2 = new string[len]; //новый массив
- int l = -1; //служебная переменная
- for (i = 0; i < tempString.Length; i += 2) //в старом массиве шаг равен 2
- {
- l++; //индексы для нового массива
- if (l < len)
- {
- //Элемент_нового_массива[i] = Элемент_старого_массива[i] + Элемент_старого_массива[i+1]
- str2[l] = Convert.ToString(tempString[i]) + Convert.ToString(tempString[i + 1]);
- }
- }
- foreach (string both in str2)
- {
- for (i = 0; i < encriptionMatrixX; i++)
- {
- for (j = 0; j < encriptionMatrixY; j++)
- {
- //координаты первого символа пары в исходной матрице
- if (both[0] == Convert.ToChar(encriptionMatrix[i, j]))
- {
- i_first = i;
- j_first = j;
- }
- //координаты второго символа пары в исходной матрице
- if (both[1] == Convert.ToChar(encriptionMatrix[i, j]))
- {
- i_second = i;
- j_second = j;
- }
- }
- }
- if (s1 == s2)
- {
- if (i_first != 0 && i_second != 0)
- {
- s1 = Convert.ToString(encriptionMatrix[i_first - 1, j_first]);
- s2 = Convert.ToString(encriptionMatrix[i_second - 1, j_second]);
- }
- else
- {
- s1 = Convert.ToString(encriptionMatrix[encriptionMatrixX - 1, j_first]);
- s2 = Convert.ToString(encriptionMatrix[encriptionMatrixX - 1, j_second]);
- }
- }
- if (s1 != s2)
- {
- if (i_first == i_second)
- {
- if (j_first == 0) /*если символ первый в строке,
- кодируем его последним символом из матрицы*/
- {
- s1 = Convert.ToString(encriptionMatrix[i_first, encriptionMatrixY - 1]);
- }
- //если символ не последний, кодируем его стоящим справа от него
- else
- {
- s1 = Convert.ToString(encriptionMatrix[i_first, j_first - 1]);
- }
- if (j_second == 0) /*если символ последний в строке
- кодируем его первым символом из матрицы*/
- {
- s2 = Convert.ToString(encriptionMatrix[i_second, encriptionMatrixY - 1]);
- }
- //если символ не последний, кодируем его стоящим справа от него
- else
- {
- s2 = Convert.ToString(encriptionMatrix[i_second, j_second - 1]);
- }
- }
- ///если пара символов находится в одном столбце
- if (j_first == j_second)
- {
- if (i_first == 0)
- {
- s1 = Convert.ToString(encriptionMatrix[encriptionMatrixX, j_first]);
- }
- else
- {
- s1 = Convert.ToString(encriptionMatrix[i_first - 1, j_first]);
- }
- if (i_second == 0)
- {
- s2 = Convert.ToString(encriptionMatrix[encriptionMatrixX, j_second]);
- }
- else
- {
- s2 = Convert.ToString(encriptionMatrix[i_second - 1, j_second]);
- }
- }
- ///если пара символов находиться в разных столбцах и строках
- if (i_first != i_second && j_first != j_second)
- {
- s1 = Convert.ToString(encriptionMatrix[i_first, j_second]);
- s2 = Convert.ToString(encriptionMatrix[i_second, j_first]);
- }
- }
- decodetString = decodetString + s1 + s2;
- }
- richTextBox4.Text = decodetString.ToLower();
- }
- #endregion
- private void button5_Click(object sender, EventArgs e)
- {
- Application.Exit();
- }
- private void Form1_Load(object sender, EventArgs e)
- {
- }
- private void textBox1_TextChanged_1(object sender, EventArgs e)
- {
- }
- private void textBox2_TextChanged_1(object sender, EventArgs e)
- {
- }
- private void label1_Click(object sender, EventArgs e)
- {
- }
- private void richTextBox3_TextChanged(object sender, EventArgs e)
- {
- }
- private void richTextBox4_TextChanged(object sender, EventArgs e)
- {
- }
- private void groupBox3_Enter(object sender, EventArgs e)
- {
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement