示例#1
0
        private string Encrypt_bigramms(Bigramms b, List <string> table)
        {
            string Crypt_Bigrams;
            int    pos_A_x = 0, pos_A_y = 0, pos_B_x = 0, pos_B_y = 0, pos_A, pos_B;
            int    i = 0;
            // узнаём кол-во строк
            int rows = panelMethod_4_p_generate_table_p_lang_EN.Checked ? 5 : 8;
            // узнаём кол-во столбцов
            int column = panelMethod_4_p_generate_table_p_lang_EN.Checked ? 5 : 4;

            // проверяем на одинаковые символы
            if (b.A == b.B)
            {
                b.SetB("x");
            }
            // флаги закрытия поиска позиций
            bool f1 = false, f2 = false;

            // ищем позиции биграммы
            foreach (var c in table)
            {
                if (c == b.A)
                {
                    var CountPos = i;
                    for (var x = 0; CountPos >= column; pos_A_x++)
                    {
                        CountPos -= column;
                        x++;
                    }
                    pos_A_y = CountPos;
                    f1      = true;
                }
                if (c == b.B)
                {
                    var CountPos = i;
                    for (var x = 0; CountPos >= column; pos_B_x++)
                    {
                        CountPos -= column;
                        x++;
                    }
                    pos_B_y = CountPos;
                    f2      = true;
                }
                if (f1 && f2)
                {
                    break;
                }
                i++;
            }
            // Проверка на нахождение в 1 строке
            if (pos_A_x == pos_B_x)
            {
                pos_A_y++;
                pos_B_y++;
                if (pos_A_y >= column)
                {
                    pos_A_y = 0;
                }
                if (pos_B_y >= column)
                {
                    pos_B_y = 0;
                }
            }
            // Проверка на нахождение в 1 столбце
            else if (pos_A_y == pos_B_y)
            {
                pos_A_x++;
                pos_B_x++;
                if (pos_A_x >= rows)
                {
                    pos_A_x = 0;
                }
                if (pos_B_x >= rows)
                {
                    pos_B_x = 0;
                }
            }
            // Окончательное нахождение
            else
            {
                var tmp2 = pos_A_y;
                pos_A_y = pos_B_y;
                pos_B_y = tmp2;
            }
            // нахождение новых позиций
            pos_A = pos_A_y + (pos_A_x * column);
            pos_B = pos_B_y + (pos_B_x * column);
            // Находим новые буквы
            Crypt_Bigrams = table[pos_A] + table[pos_B];
            return(Crypt_Bigrams + " ");
        }
示例#2
0
        private void PanelMethod_4_p_encrypt_btn_Click(object sender, EventArgs e)
        {
            if (this.panelMethod_4_p_encrypt_in.Text == "Введите сообщение, которое надо зашифровать")
            {
                MessageBox.Show(
                    "Введите сообщение, которое надо зашифровать",
                    "Ошибка",
                    MessageBoxButtons.OK,
                    MessageBoxIcon.Warning
                    );
                this.panelMethod_4_p_encrypt_out.Text = "";
            }
            else
            {
                // создаём лист таблицы
                List <string> table = new List <string>()
                {
                };
                // генерим лист таблицы
                bool flag = false;
                // нажата клавиша "Секретный ключ"
                if (this.panelMethod_4_p_generate_table_p_Method_generate_key.Checked)
                {
                    if (this.panelMethod_4_p_generate_table_p_Method_otions_Method_1_key.Text == "введите секретное слово")
                    {
                        MessageBox.Show(
                            "Введите секретное слово",
                            "Ошибка",
                            MessageBoxButtons.OK,
                            MessageBoxIcon.Warning
                            );
                        Change_Status_Enable_Elements_PanelMethod_4(false);
                    }
                    else
                    {
                        Change_Status_Enable_Elements_PanelMethod_4();
                        table = PanelMethod_4_generate_table(
                            1,
                            Convert.ToString(this.panelMethod_4_p_generate_table_p_Method_otions_Method_1_key.Text),
                            this.panelMethod_4_p_generate_table_p_lang_EN.Checked
                            );
                        flag = true;
                    }
                }
                // нажата клавиша "Смещения"
                else if (this.panelMethod_4_p_generate_table_p_Method_generate_offset.Checked)
                {
                    if (this.panelMethod_4_p_generate_table_p_Method_otions_Method_2_offset.Text == "Введите число от 0 до 25" || this.panelMethod_4_p_generate_table_p_Method_otions_Method_2_offset.Text == "Введите число от 0 до 33")
                    {
                        // нажата клавиша "Латиница"
                        if (this.panelMethod_4_p_generate_table_p_lang_EN.Checked)
                        {
                            MessageBox.Show(
                                "Введите число от 0 до 25",
                                "Ошибка",
                                MessageBoxButtons.OK,
                                MessageBoxIcon.Warning
                                );
                            Change_Status_Enable_Elements_PanelMethod_4(false);
                        }
                        // нажата клавиша "Кириллица"
                        else
                        {
                            MessageBox.Show(
                                "Введите число от 0 до 33",
                                "Ошибка",
                                MessageBoxButtons.OK,
                                MessageBoxIcon.Warning
                                );
                            Change_Status_Enable_Elements_PanelMethod_4(false);
                        }
                    }
                    // нажата клавиша "Рандом"
                    else
                    {
                        bool fla    = true;
                        int  offset = Convert.ToInt32(this.panelMethod_4_p_generate_table_p_Method_otions_Method_2_offset.Text);
                        // нажата клавиша "Латиница"
                        if (this.panelMethod_4_p_generate_table_p_lang_EN.Checked)
                        {
                            if (offset < 0 || offset > 25)
                            {
                                this.panelMethod_4_p_generate_table_p_Method_otions_Method_2_offset.Text = "Введите число от 0 до 25";
                                MessageBox.Show(
                                    "Введите число от 0 до 25",
                                    "Ошибка",
                                    MessageBoxButtons.OK,
                                    MessageBoxIcon.Warning
                                    );

                                Change_Status_Enable_Elements_PanelMethod_4(false);
                                fla = false;
                            }
                        }
                        // нажата клавиша "Кириллица"
                        else
                        {
                            if (offset < 0 || offset > 33)
                            {
                                this.panelMethod_4_p_generate_table_p_Method_otions_Method_2_offset.Text = "Введите число от 0 до 33";
                                MessageBox.Show(
                                    "Введите число от 0 до 33",
                                    "Ошибка",
                                    MessageBoxButtons.OK,
                                    MessageBoxIcon.Warning
                                    );
                                Change_Status_Enable_Elements_PanelMethod_4(false);
                                fla = false;
                            }
                        }
                        // клавиша "Рандом" прошла проверки на правильность числа
                        if (fla)
                        {
                            Change_Status_Enable_Elements_PanelMethod_4();
                            table = PanelMethod_4_generate_table(
                                2,
                                Convert.ToString(this.panelMethod_4_p_generate_table_p_Method_otions_Method_2_offset.Text),
                                this.panelMethod_4_p_generate_table_p_lang_EN.Checked
                                );
                            flag = true;
                        }
                    }
                }
                // нажата клавиша "Рандом"
                else if (this.panelMethod_4_p_generate_table_p_Method_generate_randomize.Checked)
                {
                    // система генерит сама семя
                    if (this.panelMethod_4_p_generate_table_p_Method_otions_Method_3_seed_tb.Text == "введите число семени рандомайзера или не трогайте данное поле для генерации случайного семени")
                    {
                        table = PanelMethod_4_generate_table(
                            2,
                            Convert.ToString(this.panelMethod_4_add_label_1.Text),
                            this.panelMethod_4_p_generate_table_p_lang_EN.Checked
                            );
                        flag = true;
                    }
                }
                // заполнение данных в data grid
                if (flag)
                {
                    // Получаем текст
                    string text = this.panelMethod_4_p_encrypt_in.Text.ToLower();
                    // Удаляем лишние пробелы из текста
                    text = text.Replace(" ", string.Empty);
                    // узнаём количество биграмм
                    double tmp          = text.Length / 2.0;
                    int    CountBigramm = Convert.ToInt32(Math.Floor(tmp));
                    if (tmp != CountBigramm) // Считаем если кол-во символов нечётное, то последнее число неполной биграммой
                    {
                        CountBigramm++;
                    }
                    // Создаём биграммы
                    List <Bigramms> Bigramm = new List <Bigramms> {
                    };
                    int tmp1 = 0;
                    // Вносим в лист биграммы
                    for (var i = 0; i < CountBigramm; i++)
                    {
                        if (text.Length % 2 != 0)
                        {
                            if (i == CountBigramm - 1)
                            {
                                Bigramms bigramms = new Bigramms(Convert.ToString(text[tmp1]), "x");
                                Bigramm.Insert(i, bigramms);
                                tmp1 += 2;
                            }
                            else
                            {
                                Bigramms b = new Bigramms(Convert.ToString(text[tmp1]), Convert.ToString(text[tmp1 + 1]));
                                Bigramm.Insert(i, b);
                                tmp1 += 2;
                            }
                        }
                        else
                        {
                            Bigramms b = new Bigramms(Convert.ToString(text[tmp1]), Convert.ToString(text[tmp1 + 1]));
                            Bigramm.Insert(i, b);
                            tmp1 += 2;
                        }
                    }

                    // Отчищаем поле вывода
                    this.panelMethod_4_p_encrypt_out.Text = "";

                    // Шифровка биграмм
                    foreach (var b in Bigramm)
                    {
                        this.panelMethod_4_p_encrypt_out.Text += Encrypt_bigramms(b, table);
                    }
                    this.panelMethod_4_p_table_label.Visible = false;
                }
            }
        }