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 + " "); }
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; } } }