Advertisement
Guest User

Untitled

a guest
Mar 31st, 2015
231
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 17.00 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Data;
  5. using System.Drawing;
  6. using System.Linq;
  7. using System.Text;
  8. using System.Windows.Forms;
  9. using System.Text.RegularExpressions;
  10.  
  11.  
  12. namespace Playfair_code
  13. {
  14.     public partial class Form1 : Form
  15.     {
  16.         public Form1()
  17.         {
  18.             InitializeComponent();
  19.         }
  20.         //матрица алфавита шифрования
  21.         private int encriptionMatrixX = 0;
  22.         private int encriptionMatrixY = 0;
  23.        private string[,] encriptionMatrix /*=
  24.                                          {
  25.                                          {"А", "Ч", "Б", "М", "Ц", "В"}, //первая строка матрицы
  26.                                          {"Ь", "Г", "Н", "Ш", "Д", "О"}, //вторая строка матрицы
  27.                                          {"Е", "Щ", ",", "Х", "У", "П"}, //третья строка матрицы
  28.                                          {".", "З", "Ъ", "Р", "И", "Й"}, //четвертая строка матрицы
  29.                                          {"С", "-", "К", "Э", "Т", "Л"}, //пятая строка матрицы
  30.                                          {"Ю", "Я", " ", "Ы", "Ф", "Ж"}  //шестая строка матрицы
  31.                                          }*/;
  32.  
  33.        private string text; //исходный текст для шифрования
  34.      
  35.        private int i_first = 0, j_first = 0;  //координаты первого символа пары
  36.        private int i_second = 0, j_second = 0;//координаты второго символа пары
  37.        private string  s1 = "", s2 = ""; //строки для хранения зашифрованного символа
  38.        private string encodetString; //зашифрованая строка
  39.        private string decodetString; //расшифрованная строка
  40.      
  41.        #region Кодирование текста
  42.  
  43.        private void button1_Click(object sender, EventArgs e)
  44.        {
  45.             text = "";
  46.             encodetString = "";
  47.          
  48.             text = Convert.ToString(richTextBox1.Text).ToUpper();
  49.             int t = text.Length; //длина входного слова
  50.             int i, j;
  51.             ///проверяем, четное ли число символов в строке
  52.             int temp = t % 2;
  53.             if (temp != 0) //если нет
  54.             {               //то добавляем в конец строки символ " "
  55.                 text = text.PadRight((t + 1), ' ');
  56.             }
  57.  
  58.             int len = text.Length / 2; /*длина нового массива -
  59.                                                 равная половине длины входного слова
  60.                                                  т.к. в новом масиве каждый элемент будет
  61.                                                    содержать 2 элемента из старого массива*/
  62.  
  63.             string[] str = new string[len]; //новый массив
  64.  
  65.             int l = -1; //служебная переменная
  66.  
  67.             for (i = 0; i < t; i += 2) //в старом массиве шаг равен 2
  68.             {
  69.                 l++; //индексы для нового массива
  70.                 if (l < len)
  71.                 {
  72.                     //Элемент_нового_массива[i] =  Элемент_старого_массива[i] +  Элемент_старого_массива[i+1]
  73.                     str[l] = Convert.ToString(text[i]) + Convert.ToString(text[i + 1]);
  74.                 }
  75.  
  76.             }
  77.  
  78.             ///координаты очередного найденного символа из каждой пары
  79.  
  80.             foreach (string both in str)
  81.             {
  82.                 for (i = 0; i < encriptionMatrixX; i++)
  83.                 {
  84.                     for (j = 0; j < encriptionMatrixY; j++)
  85.                     {
  86.                         //координаты первого символа пары в исходной матрице
  87.                         if (both[0] == Convert.ToChar(encriptionMatrix[i, j]))
  88.                         {
  89.                             i_first = i;
  90.                             j_first = j;
  91.  
  92.                         }
  93.  
  94.                         //координаты второго символа пары в исходной матрице
  95.                         if (both[1] == Convert.ToChar(encriptionMatrix[i, j]))
  96.                         {
  97.                             i_second = i;
  98.                             j_second = j;
  99.  
  100.                         }
  101.                     }
  102.                 }
  103.  
  104.                 ///если пара символов находится в одной строке
  105.                 if (i_first == i_second)
  106.                 {
  107.                     if (j_first == encriptionMatrixY - 1) /*если символ последний в строке,
  108.                                        кодируем его первым символом из матрицы*/
  109.                     {
  110.                         s1 = Convert.ToString(encriptionMatrix[i_first, 0]);
  111.                     }
  112.                     //если символ не последний, кодируем его стоящим справа от него
  113.                     else
  114.                     {
  115.                         s1 = Convert.ToString(encriptionMatrix[i_first, j_first + 1]);
  116.                     }
  117.  
  118.                     if (j_second == encriptionMatrixY - 1) /*если символ последний в строке
  119.                                        кодируем его первым символом из матрицы*/
  120.                     {
  121.                         s2 = Convert.ToString(encriptionMatrix[i_second, 0]);
  122.                     }
  123.                     //если символ не последний, кодируем его стоящим справа от него
  124.                     else
  125.                     {
  126.                         s2 = Convert.ToString(encriptionMatrix[i_second, j_second + 1]);
  127.                     }
  128.  
  129.                 }
  130.  
  131.                 ///если пара символов находится в одном столбце
  132.                 if (j_first == j_second)
  133.                 {
  134.                     if (i_first == encriptionMatrixX - 1)
  135.                     {
  136.                         s1 = Convert.ToString(encriptionMatrix[encriptionMatrixX, j_first]);
  137.                     }
  138.                     else
  139.                     {
  140.                         s1 = Convert.ToString(encriptionMatrix[i_first + 1, j_first]);
  141.                     }
  142.  
  143.                     if (i_second == encriptionMatrixX - 1)
  144.                     {
  145.                         s2 = Convert.ToString(encriptionMatrix[encriptionMatrixX, j_second]);
  146.                     }
  147.  
  148.                     else
  149.                     {
  150.                         s2 = Convert.ToString(encriptionMatrix[i_second + 1, j_second]);
  151.                     }
  152.                 }
  153.  
  154.                 ///если пара символов находиться в разных столбцах и строках
  155.                 if (i_first != i_second && j_first != j_second)
  156.                 {
  157.  
  158.                     s1 = Convert.ToString(encriptionMatrix[i_first, j_second]);
  159.                     s2 = Convert.ToString(encriptionMatrix[i_second, j_first]);
  160.                 }
  161.  
  162.                 if (s1 == s2)
  163.                 {
  164.                     encodetString = encodetString + s1 + "=" + s2;
  165.                 }
  166.                 else
  167.                 {
  168.  
  169.                     //записыавем результат кодирования
  170.                     encodetString = encodetString + s1 + s2;
  171.                 }
  172.  
  173.                 richTextBox2.Text = encodetString.ToLower();
  174.             }
  175.        }
  176.  
  177.        #endregion
  178.  
  179.  
  180.         private void updateMatrix(int x, int y, string s) {
  181.  
  182.             s = s.Replace(" ", "").Replace("\n", "").Replace("\t", "");
  183.  
  184.             s = " " + s;
  185.  
  186.             encriptionMatrixX = x;
  187.             encriptionMatrixY = y;
  188.  
  189.             encriptionMatrix = new string[x, y];
  190.             for (int i = 0; i < x; i++) {
  191.                 for (int j = 0; j < y; j++) {
  192.                     encriptionMatrix[i, j] = s[i * y + j] + "";
  193.                 }
  194.             }
  195.         }
  196.  
  197.        private void button3_Click(object sender, EventArgs e)
  198.         {
  199.                            
  200.             int x = Convert.ToInt32(textBox1.Text);
  201.             int y = Convert.ToInt32(textBox2.Text);
  202.  
  203.             updateMatrix(x, y, richTextBox3.Text);
  204.  
  205.             int count = 0;
  206.             //if (login == "root" && pass == "qwerty")
  207.             //{
  208.  
  209.            // Show matrix
  210.             richTextBox3.Text += "\n";
  211.             foreach (string s in encriptionMatrix)
  212.             {
  213.                 count++;
  214.                 if (count != encriptionMatrixX)
  215.                 {
  216.                     richTextBox3.Text += s + "\t";
  217.                 }
  218.                 if (count == encriptionMatrixX)
  219.                 {
  220.                     richTextBox3.Text += s + "\t\n";
  221.                     count = 0;
  222.                 }
  223.             }
  224.            // end Show matrix
  225.             //}
  226.             //else
  227.             //{
  228.             //    MessageBox.Show("Неверный логин и пароль", "Ошибка инициализации", MessageBoxButtons.OK, MessageBoxIcon.Warning);
  229.                
  230.             //}
  231.         }
  232.  
  233.         private void button4_Click(object sender, EventArgs e)
  234.         {
  235.             richTextBox3.Clear();
  236.             textBox2.Clear();
  237.  
  238.         }
  239.        
  240.    
  241.         #region Раскодирование текста
  242.         private void button2_Click_1(object sender, EventArgs e)
  243.         {
  244.             decodetString = "";
  245.             string tempString = ""; //переменная для хранения строки подлежащей расшифровке
  246.             int i, j;
  247.  
  248.             //удаляем символы "-" из зашифрованной строки
  249.             for (i = 0; i < encodetString.Length; i++)
  250.             {
  251.                 if (encodetString[i] != '=')
  252.                 {
  253.                     tempString = tempString + encodetString[i].ToString();
  254.                 }
  255.             }
  256.             //MessageBox.Show(tempString);
  257.  
  258.  
  259.             int len = tempString.Length / 2; /*длина нового массива -
  260.                                                 равная половине длины входного слова
  261.                                                  т.к. в новом масиве каждый элемент будет
  262.                                                    содержать 2 элемента из старого массива*/
  263.  
  264.             string[] str2 = new string[len]; //новый массив
  265.  
  266.             int l = -1; //служебная переменная
  267.  
  268.             for (i = 0; i < tempString.Length; i += 2) //в старом массиве шаг равен 2
  269.             {
  270.                 l++; //индексы для нового массива
  271.                 if (l < len)
  272.                 {
  273.                     //Элемент_нового_массива[i] =  Элемент_старого_массива[i] +  Элемент_старого_массива[i+1]
  274.                     str2[l] = Convert.ToString(tempString[i]) + Convert.ToString(tempString[i + 1]);
  275.                 }
  276.  
  277.             }
  278.  
  279.  
  280.             foreach (string both in str2)
  281.             {
  282.                 for (i = 0; i < encriptionMatrixX; i++)
  283.                 {
  284.                     for (j = 0; j < encriptionMatrixY; j++)
  285.                     {
  286.                         //координаты первого символа пары в исходной матрице
  287.                         if (both[0] == Convert.ToChar(encriptionMatrix[i, j]))
  288.                         {
  289.                             i_first = i;
  290.                             j_first = j;
  291.                         }
  292.  
  293.                         //координаты второго символа пары в исходной матрице
  294.                         if (both[1] == Convert.ToChar(encriptionMatrix[i, j]))
  295.                         {
  296.                             i_second = i;
  297.                             j_second = j;
  298.                         }
  299.                     }
  300.                 }
  301.  
  302.                 if (s1 == s2)
  303.                 {
  304.                     if (i_first != 0 && i_second != 0)
  305.                     {
  306.                         s1 = Convert.ToString(encriptionMatrix[i_first - 1, j_first]);
  307.                         s2 = Convert.ToString(encriptionMatrix[i_second - 1, j_second]);
  308.                     }
  309.                     else
  310.                     {
  311.                         s1 = Convert.ToString(encriptionMatrix[encriptionMatrixX - 1, j_first]);
  312.                         s2 = Convert.ToString(encriptionMatrix[encriptionMatrixX - 1, j_second]);
  313.                     }
  314.  
  315.                 }
  316.                 if (s1 != s2)
  317.                 {
  318.                     if (i_first == i_second)
  319.                     {
  320.                         if (j_first == 0) /*если символ первый в строке,
  321.                                        кодируем его последним символом из матрицы*/
  322.                         {
  323.                             s1 = Convert.ToString(encriptionMatrix[i_first, encriptionMatrixY - 1]);
  324.                         }
  325.                         //если символ не последний, кодируем его стоящим справа от него
  326.                         else
  327.                         {
  328.                             s1 = Convert.ToString(encriptionMatrix[i_first, j_first - 1]);
  329.                         }
  330.  
  331.                         if (j_second == 0) /*если символ последний в строке
  332.                                        кодируем его первым символом из матрицы*/
  333.                         {
  334.                             s2 = Convert.ToString(encriptionMatrix[i_second, encriptionMatrixY - 1]);
  335.                         }
  336.                         //если символ не последний, кодируем его стоящим справа от него
  337.                         else
  338.                         {
  339.                             s2 = Convert.ToString(encriptionMatrix[i_second, j_second - 1]);
  340.                         }
  341.  
  342.                     }
  343.                     ///если пара символов находится в одном столбце
  344.                     if (j_first == j_second)
  345.                     {
  346.                         if (i_first == 0)
  347.                         {
  348.                             s1 = Convert.ToString(encriptionMatrix[encriptionMatrixX, j_first]);
  349.                         }
  350.                         else
  351.                         {
  352.                             s1 = Convert.ToString(encriptionMatrix[i_first - 1, j_first]);
  353.                         }
  354.  
  355.                         if (i_second == 0)
  356.                         {
  357.                             s2 = Convert.ToString(encriptionMatrix[encriptionMatrixX, j_second]);
  358.                         }
  359.  
  360.                         else
  361.                         {
  362.                             s2 = Convert.ToString(encriptionMatrix[i_second - 1, j_second]);
  363.                         }
  364.                     }
  365.  
  366.                     ///если пара символов находиться в разных столбцах и строках
  367.                     if (i_first != i_second && j_first != j_second)
  368.                     {
  369.  
  370.                         s1 = Convert.ToString(encriptionMatrix[i_first, j_second]);
  371.                         s2 = Convert.ToString(encriptionMatrix[i_second, j_first]);
  372.  
  373.                     }
  374.                 }
  375.  
  376.                
  377.                 decodetString = decodetString + s1 + s2;
  378.             }
  379.  
  380.  
  381.             richTextBox4.Text = decodetString.ToLower();
  382.         }
  383.         #endregion
  384.      
  385.  
  386.         private void button5_Click(object sender, EventArgs e)
  387.         {
  388.             Application.Exit();
  389.         }
  390.  
  391.         private void Form1_Load(object sender, EventArgs e)
  392.         {
  393.  
  394.         }
  395.  
  396.         private void textBox1_TextChanged_1(object sender, EventArgs e)
  397.         {
  398.  
  399.         }
  400.  
  401.         private void textBox2_TextChanged_1(object sender, EventArgs e)
  402.         {
  403.  
  404.         }
  405.  
  406.         private void label1_Click(object sender, EventArgs e)
  407.         {
  408.  
  409.         }
  410.  
  411.         private void richTextBox3_TextChanged(object sender, EventArgs e)
  412.         {
  413.  
  414.         }
  415.  
  416.         private void richTextBox4_TextChanged(object sender, EventArgs e)
  417.         {
  418.  
  419.         }
  420.  
  421.         private void groupBox3_Enter(object sender, EventArgs e)
  422.         {
  423.  
  424.         }
  425.  
  426.        
  427.  
  428.        
  429.     }
  430. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement