private void toolStripDeshifr_Click(object sender, EventArgs e)//активируется при нажатии на кнопку “Дешифровать” { if (!flagDemo) { bool flag = false; //флаг для проверки того, введены данные вручную (принимает значение true) или же получены через файл (принимает значение false) if (textBoxOriginal.Text != "") //если тестовое поле не пусто, то данные введены вручную { textFromFile = textBoxOriginal.Text; flag = true; } string[] fnd = { }; if (!flag) { fnd = fileNameDeshifr.Split('-'); } if (flag || !flag && fnd[fnd.Length - 2] == ".txt") { int n = textFromFile.Length; textBoxProcessed.Text = "Идет обработка данных..."; if (n % 4 != 0) { for (int i = 0; i < 4 - n % 4; i++) { textFromFile += " "; //дополнение входных данных пробелами в том случае, если они имеют недостаточное количество бит } } GOST28147 shifr = new GOST28147(key, textFromFile); processed = shifr.Decrypt(); //дешифрование входных данных в классе GOST28147 if (!flag) //если данные были получены из файла, то зашифрованные данные сохраняются в файл с названием GOST-Deshifr.(расширение ранее зашифрованного файла) { using (FileStream fstream = new FileStream("GOST-Deshifr" + fnd[fnd.Length - 2], FileMode.OpenOrCreate)) { byte[] array = Encoding.Default.GetBytes(processed); fstream.Write(array, 0, Convert.ToInt32(fnd[fnd.Length - 3])); } textBoxProcessed.Text = "Обработанные данные сохранены в файл, с названием " + "GOST-Deshifr" + fnd[fnd.Length - 2]; } else//если данные были введены вручную, то дешифрованные данные появятся в текстовом поле в правой части формы { textBoxProcessed.Text = processed; buttonCarryover.Show(); } processed = ""; } else { MessageBox.Show("В текущей версии приложения не доступно дешифрование картинок, видео и аудио", "Ошибка!", MessageBoxButtons.OK, MessageBoxIcon.Error); textBoxProcessed.Clear(); } } else { textBoxProcessed.Text = "Нажмите далее и демострация начнется"; buttonFurther.Show(); flagDemoDeshifr = true; } }
private void toolStripShifr_Click(object sender, EventArgs e)//активируется при нажатии на кнопку “Зашифровать” { if (!flagDemo) { bool flag = false; //флаг для проверки того, введены данные вручную (принимает значение true) или же получены через файл (принимает значение false) if (textBoxOriginal.Text != "") //если тестовое поле не пусто, то данные введены вручную { textFromFile = textBoxOriginal.Text; flag = true; } textBoxProcessed.Text = "Идет обработка данных..."; int n = textFromFile.Length; if (n % 4 != 0) { for (int i = 0; i < 4 - n % 4; i++) { textFromFile += " "; //дополнение входных данных пробелами в том случае, если они имеют недостаточное количество бит } } GOST28147 shifr = new GOST28147(key, textFromFile); processed = shifr.Encrypt(); //шифрование входных данных в классе GOST28147 if (!flag) //если данные были получены из файла, то зашифрованные данные сохраняются в файл с названием GOST-(размер исходного файла)-(расширение исходного файла)-.txt { using (FileStream fstream = new FileStream("GOST-" + sizeFile + "-" + ext + "-.txt", FileMode.OpenOrCreate)) { byte[] array = Encoding.Default.GetBytes(processed); fstream.Write(array, 0, array.Length); } textBoxProcessed.Text = "Обработанные данные сохранены в файл, с названием " + "GOST-" + sizeFile + "-" + ext + "-.txt"; } else//если данные были введены вручную, то зашифрованные данные появятся в текстовом поле в правой части формы { labelProcessed.Text = "Обработанные данные"; buttonCarryover.Show(); textBoxProcessed.Text = processed; } processed = ""; } else { textBoxProcessed.Text = "Нажмите далее и демострация начнется"; buttonFurther.Show(); flagDemoShifr = true; } }
private void buttonFurther_Click(object sender, EventArgs e)//активируется при нажатии на кнопку "Далее" { labelKey.Show(); textBoxKey.Show(); GOST28147 shifr = new GOST28147(key, textBoxOriginal.Text); if (flagDemoShifr) //демонстрационный режим шифрования { int n; textBoxOriginal.Hide(); if (flagFurther == 0) { pictureBoxDemoShifr2.Hide(); pictureBoxDemoShifr0.Show(); n = textBoxOriginal.Text.Length; if (n % 4 != 0) { for (int i = 0; i < 4 - n % 4; i++) { textBoxOriginal.Text += " "; } } schDemoKey = (schDemoKey + 1) % 16; demoL0 = Convert.ToInt64(textBoxOriginal.Text[schDemo]) * Convert.ToInt64(Math.Pow(2, 16)) + Convert.ToInt64(textBoxOriginal.Text[schDemo + 1]); //левая половина шифруемого блока demoR0 = Convert.ToInt64(textBoxOriginal.Text[schDemo + 2]) * Convert.ToInt64(Math.Pow(2, 16)) + Convert.ToInt64(textBoxOriginal.Text[schDemo + 3]); //правая половина шифруемого блока demoR02 = Convert.ToString(textBoxOriginal.Text[schDemo + 2]) + Convert.ToString(textBoxOriginal.Text[schDemo + 3]); //сохранение правой половины шифруемого блока для отображения в текстовом поле if (schDemoKey != 15) { demoX0 = key[schDemoKey, 0] * Convert.ToInt64(Math.Pow(2, 16)) + key[schDemoKey, 1]; } else { demoX0 = key[schDemoKey, 1] * Convert.ToInt64(Math.Pow(2, 16)) + key[schDemoKey, 0]; } buttonFurther.Show(); textBoxProcessed.Hide(); labelR0.Hide(); labelR1.Hide(); textBoxR11.Hide(); textBoxR12.Hide(); labelDemoInfo1.Text = "Данные для шифрования:"; labelDemoInfo1.Show(); labelL0R1.Text = "L0"; labelL0R1.Show(); labelR0R0.Text = "R0"; labelR0R0.Show(); labelX0.Show(); textBoxL01.Show(); textBoxL02.Show(); textBoxL03.Show(); textBoxL04.Show(); textBoxR01.Show(); textBoxR02.Show(); textBoxR03.Show(); textBoxR04.Show(); textBoxX01.Show(); textBoxX02.Show(); textBoxX03.Show(); textBoxX04.Show(); labelDemoInfo3.Text = "Подключ:"; labelDemoInfo3.Show(); textBoxL01.Text = Convert.ToString(textBoxOriginal.Text[schDemo]); //запись первого символа левой половины шифруемого блока в текстовое поле textBoxL02.Text = Convert.ToString(textBoxOriginal.Text[schDemo + 1]); //запись второго символа левой половины шифруемого блока в текстовое поле textBoxL03.Text = Binary(demoL0 / Convert.ToInt64(Math.Pow(2, 16))); //запись первого символа левой половины шифруемого блока, представленного в двоичном виде, в текстовое поле textBoxL04.Text = Binary(demoL0 % Convert.ToInt64(Math.Pow(2, 16))); //запись второго символа левой половины шифруемого блока, представленного в двоичном виде, в текстовое поле textBoxR01.Text = Convert.ToString(textBoxOriginal.Text[schDemo + 2]); //запись первого символа правой половины шифруемого блока в текстовое поле textBoxR02.Text = Convert.ToString(textBoxOriginal.Text[schDemo + 3]); //запись второго символа правой половины шифруемого блока в текстовое поле textBoxR03.Text = Binary(demoR0 / Convert.ToInt64(Math.Pow(2, 16))); //запись первого символа правой половины шифруемого блока, представленного в двоичном виде, в текстовое поле textBoxR04.Text = Binary(demoR0 % Convert.ToInt64(Math.Pow(2, 16))); //запись второго символа правой половины шифруемого блока, представленного в двоичном виде, в текстовое поле textBoxX01.Text = Convert.ToString(Convert.ToChar(demoX0 / Convert.ToInt64(Math.Pow(2, 16)))); //запись левой части подключа в текстовое поле textBoxX02.Text = Convert.ToString(Convert.ToChar(demoX0 % Convert.ToInt64(Math.Pow(2, 16)))); //запись правой части подключа в текстовое поле textBoxX03.Text = Binary(demoX0 / Convert.ToInt64(Math.Pow(2, 16))); //запись левой части подключа, представленной в двоичном виде, в текстовое поле textBoxX04.Text = Binary(demoX0 % Convert.ToInt64(Math.Pow(2, 16))); //запись правой части подключа, представленной в двоичном виде, в текстовое поле flagFurther = 1; } else { if (flagFurther == 1) { pictureBoxDemoShifr0.Hide(); pictureBoxDemoShifr1.Show(); demoResult = shifr.Conversion(demoR0, demoX0); //преобразование в классе GOST28147 (вычисление суммы правой половины шифруемого блока и подключа по mod 2^32, преобразование в блоке подстановки и сдвиг результата на 11 бит влево) labelDemoInfo1.Text = "Вычисление суммы R0 и X0 по mod2^32:"; labelDemoInfo2.Show(); labelDemoInfo3.Text = "Циклический сдвиг влево на 11 бит:"; labelDemoInfo3.Show(); labelR0R0.Hide(); labelL0R1.Hide(); labelX0.Hide(); textBoxL01.Hide(); textBoxL02.Hide(); textBoxL03.Hide(); textBoxL04.Hide(); textBoxR01.Hide(); textBoxR02.Hide(); textBoxR03.Hide(); textBoxR04.Hide(); textBoxX01.Text = ""; textBoxX02.Text = ""; textBoxX01.Hide(); textBoxX02.Hide(); textBoxX03.Hide(); textBoxX04.Hide(); textBoxR11.Show(); textBoxR12.Show(); textBoxR13.Show(); long summ_mod32 = (demoR0 + demoX0) % Convert.ToInt64(Math.Pow(2, 32)); //вычисление суммы правой половины шифруемого блока и подключа по mod 2^32 textBoxR11.Text = Binary(summ_mod32 / Convert.ToInt64(Math.Pow(2, 16))) + "" + Binary(summ_mod32 % Convert.ToInt64(Math.Pow(2, 16))); //запись суммы правой половины шифруемого блока и подключа по mod 2^32, представленной в двоичном виде, в текстовое поле textBoxR12.Text = Binary((demoResult >> 11) / Convert.ToInt64(Math.Pow(2, 16))) + "" + Binary((demoResult >> 11) % Convert.ToInt64(Math.Pow(2, 16))); //запись результата преобразования в блоке подстановки, представленного в двоичном виде, в текстовое поле textBoxR13.Text = Binary(demoResult / Convert.ToInt64(Math.Pow(2, 16))) + "" + Binary(demoResult % Convert.ToInt64(Math.Pow(2, 16))); //запись сдвига последнего результата на 11 бит влево, представленного в двоичном виде, в текстовое поле flagFurther = 2; } else { if (flagFurther == 2) { pictureBoxDemoShifr1.Hide(); pictureBoxDemoShifr2.Show(); long R1 = shifr.Xor(demoL0, demoResult); //вычисление суммы левой половины шифруемого блока и результата, полученного из метода Conversion класса GOST28147, по mod 2 в классе GOST28147 labelDemoInfo1.Text = "Складываем данный результат с L0 по mod2"; labelL0R1.Text = "R1"; labelL0R1.Show(); labelR0.Show(); textBoxR12.Text = Binary(R1 / Convert.ToInt64(Math.Pow(2, 16))) + " " + Binary(R1 % Convert.ToInt64(Math.Pow(2, 16))); //запись суммы левой половины шифруемого блока и результата, полученного из метода Conversion класса GOST28147, по mod 2 в текстовое поле labelDemoInfo2.Hide(); textBoxR12.Hide(); labelDemoInfo3.Text = "Зашифрованные данные"; labelR0R0.Text = "R0"; labelR0R0.Show(); textBoxR12.Show(); labelR0.Text = "R0"; labelR1.Text = "R1"; labelR0.Show(); labelR1.Show(); textBoxR13.Hide(); textBoxX01.Show(); textBoxX02.Show(); textBoxX01.Text = demoR02; //запись правой половины шифруемого блока string str = ""; str = shifr.Processing(R1, str); //получение зашифрованных символов из класса GOST28147 textBoxX02.Text += str; //запись зашифрованных символов в текстовое поле if (schDemo != textBoxOriginal.Text.Length - 4) { schDemo += 4; flagFurther = 0; } else { buttonFurther.Text = "Конец"; flagFurther = 3; } } else { Application.Restart(); //завершение демо режима } } } } else //демонстрационный режим дешифрования { if (flagDemoDeshifr) { int n; textBoxOriginal.Hide(); if (flagFurther == 0) { pictureBoxDemoDeshifr2.Hide(); pictureBoxDemoDeshifr0.Show(); n = textBoxOriginal.Text.Length; if (n % 4 != 0) { for (int i = 0; i < 4 - n % 4; i++) { textBoxOriginal.Text += " "; } } schDemoKey = (schDemoKey + 1) % 16; demoDR0 = Convert.ToInt64(textBoxOriginal.Text[schDemo]) * Convert.ToInt64(Math.Pow(2, 16)) + Convert.ToInt64(textBoxOriginal.Text[schDemo + 1]); //левая половина шифруемого блока demoDR1 = Convert.ToInt64(textBoxOriginal.Text[schDemo + 2]) * Convert.ToInt64(Math.Pow(2, 16)) + Convert.ToInt64(textBoxOriginal.Text[schDemo + 3]); //правая половина шифруемого блока demoR02 = Convert.ToString(textBoxOriginal.Text[schDemo]) + Convert.ToString(textBoxOriginal.Text[schDemo + 1]); //сохранение левой половины шифруемого блока для отображения в текстовом поле if (schDemoKey != 15) { demoX0 = key[schDemoKey, 0] * Convert.ToInt64(Math.Pow(2, 16)) + key[schDemoKey, 1]; } else { demoX0 = key[schDemoKey, 1] * Convert.ToInt64(Math.Pow(2, 16)) + key[schDemoKey, 0]; } buttonFurther.Show(); textBoxProcessed.Hide(); labelR0.Hide(); labelR1.Hide(); textBoxR11.Hide(); textBoxR12.Hide(); labelDemoInfo1.Text = "Данные для шифрования:"; labelDemoInfo1.Show(); labelL0R1.Text = "R0"; labelL0R1.Show(); labelR0R0.Text = "R1"; labelR0R0.Show(); labelX0.Show(); textBoxL01.Show(); textBoxL02.Show(); textBoxL03.Show(); textBoxL04.Show(); textBoxR01.Show(); textBoxR02.Show(); textBoxR03.Show(); textBoxR04.Show(); textBoxX01.Show(); textBoxX02.Show(); textBoxX03.Show(); textBoxX04.Show(); labelDemoInfo3.Text = "Подключ:"; labelDemoInfo3.Show(); textBoxL01.Text = Convert.ToString(textBoxOriginal.Text[schDemo]); //запись первого символа левой половины дешифруемого блока в текстовое поле textBoxL02.Text = Convert.ToString(textBoxOriginal.Text[schDemo + 1]); //запись второго символа левой половины дешифруемого блока в текстовое поле textBoxL03.Text = Binary(demoL0 / Convert.ToInt64(Math.Pow(2, 16))); //запись первого символа левой половины дешифруемого блока, представленного в двоичном виде, в текстовое поле textBoxL04.Text = Binary(demoL0 % Convert.ToInt64(Math.Pow(2, 16))); //запись второго символа левой половины дешифруемого блока, представленного в двоичном виде, в текстовое поле textBoxR01.Text = Convert.ToString(textBoxOriginal.Text[schDemo + 2]); //запись первого символа правой половины дешифруемого блока в текстовое поле textBoxR02.Text = Convert.ToString(textBoxOriginal.Text[schDemo + 3]); //запись второго символа правой половины дешифруемого блока в текстовое поле textBoxR03.Text = Binary(demoR0 / Convert.ToInt64(Math.Pow(2, 16))); //запись первого символа правой половины дешифруемого блока, представленного в двоичном виде, в текстовое поле textBoxR04.Text = Binary(demoR0 % Convert.ToInt64(Math.Pow(2, 16))); //запись второго символа правой половины дешифруемого блока, представленного в двоичном виде, в текстовое поле textBoxX01.Text = Convert.ToString(Convert.ToChar(demoX0 / Convert.ToInt64(Math.Pow(2, 16)))); //запись левой части подключа в текстовое поле textBoxX02.Text = Convert.ToString(Convert.ToChar(demoX0 % Convert.ToInt64(Math.Pow(2, 16)))); //запись правой части подключа в текстовое поле textBoxX03.Text = Binary(demoX0 / Convert.ToInt64(Math.Pow(2, 16))); //запись левой части подключа, представленной в двоичном виде, в текстовое поле textBoxX04.Text = Binary(demoX0 % Convert.ToInt64(Math.Pow(2, 16))); //запись правой части подключа, представленной в двоичном виде, в текстовое поле flagFurther = 1; } else { if (flagFurther == 1) { pictureBoxDemoDeshifr0.Hide(); pictureBoxDemoDeshifr1.Show(); demoResult = shifr.Conversion(demoDR0, demoX0); //преобразование в классе GOST28147 (вычисление суммы левой половины дешифруемого блока и подключа по mod 2^32, преобразование в блоке подстановки и сдвиг результата на 11 бит влево) labelDemoInfo1.Text = "Вычисление суммы R0 и X0 по mod2^32:"; labelDemoInfo2.Show(); labelDemoInfo3.Text = "Циклический сдвиг влево на 11 бит:"; labelDemoInfo3.Show(); labelR0R0.Hide(); labelL0R1.Hide(); labelX0.Hide(); textBoxL01.Hide(); textBoxL02.Hide(); textBoxL03.Hide(); textBoxL04.Hide(); textBoxR01.Hide(); textBoxR02.Hide(); textBoxR03.Hide(); textBoxR04.Hide(); textBoxX01.Text = ""; textBoxX02.Text = ""; textBoxX01.Hide(); textBoxX02.Hide(); textBoxX03.Hide(); textBoxX04.Hide(); textBoxR11.Show(); textBoxR12.Show(); textBoxR13.Show(); long summ_mod32 = (demoDR0 + demoX0) % Convert.ToInt64(Math.Pow(2, 32)); //вычисление суммы левой половины дешифруемого блока и подключа по mod 2^32 textBoxR11.Text = Binary(summ_mod32 / Convert.ToInt64(Math.Pow(2, 16))) + "" + Binary(summ_mod32 % Convert.ToInt64(Math.Pow(2, 16))); //запись суммы левой половины дешифруемого блока и подключа по mod 2^32, представленной в двоичном виде, в текстовое поле textBoxR12.Text = Binary((demoResult >> 11) / Convert.ToInt64(Math.Pow(2, 16))) + "" + Binary((demoResult >> 11) % Convert.ToInt64(Math.Pow(2, 16))); //запись результата преобразования в блоке подстановки, представленного в двоичном виде, в текстовое поле textBoxR13.Text = Binary(demoResult / Convert.ToInt64(Math.Pow(2, 16))) + "" + Binary(demoResult % Convert.ToInt64(Math.Pow(2, 16))); //запись сдвига последнего результата на 11 бит влево, представленного в двоичном виде, в текстовое поле flagFurther = 2; } else { if (flagFurther == 2) { pictureBoxDemoDeshifr1.Hide(); pictureBoxDemoDeshifr2.Show(); long L0 = shifr.Xor(demoDR1, demoResult); //вычисление суммы правой половины дешифруемого блока и результата, полученного из метода Conversion класса GOST28147, по mod 2 в классе GOST28147 labelDemoInfo1.Text = "Складываем данный результат с R1 по mod2"; labelL0R1.Text = "L0"; labelL0R1.Show(); labelR0.Show(); textBoxR12.Text = Binary(L0 / Convert.ToInt64(Math.Pow(2, 16))) + " " + Binary(L0 % Convert.ToInt64(Math.Pow(2, 16)));; //запись суммы правой половины дешифруемого блока и результата, полученного из метода Conversion класса GOST28147, по mod 2 в текстовое поле labelDemoInfo2.Hide(); textBoxR12.Hide(); labelDemoInfo3.Text = "Дешифрованные данные"; labelR0R0.Text = "R0"; labelR0R0.Show(); textBoxR12.Show(); labelR0.Text = "L0"; labelR1.Text = "R0"; labelR0.Show(); labelR1.Show(); textBoxR13.Hide(); textBoxX01.Show(); textBoxX02.Show(); textBoxX02.Text = demoR02; //запись левой половины дешифруемого блока string str = ""; str = shifr.Processing(L0, str); //получение дешифрованных символов из класса GOST28147 textBoxX01.Text += str; //запись дешифрованных символов в текстовое поле if (schDemo != textBoxOriginal.Text.Length - 4) { schDemo += 4; flagFurther = 0; } else { buttonFurther.Text = "Конец"; flagFurther = 3; } } else { Application.Restart(); //завершение демо режима } } } } } }