public string Encrypt(string inputStr, bool isText) { if (_form != null) { _progress = new Utils.Progress(0, inputStr.Length, 1, "Шифрование"); _progress.Show(); } List <byte> bytes = new List <byte>(); if (isText) { bytes = Encoding.Default.GetBytes(inputStr).ToList(); } else { string[] bytesInStrings = inputStr.Split(' '); foreach (var ch in bytesInStrings) { if (ch == "" || ch == " ") { continue; } bytes.Add(Byte.Parse(ch)); } } BigInteger k = KeyGen(); BigInteger s = BigInteger.ModPow(_h, k, _q); _p = BigInteger.ModPow(_g, k, _q); List <BigInteger> encryptedMessage = new List <BigInteger>(); StringBuilder sb = new StringBuilder(); for (int i = 0; i < bytes.Count; ++i) { encryptedMessage.Add(s * bytes[i]); sb.Append(encryptedMessage[i].ToString() + '\n'); if (_form != null) { _progress.PerformStep(); } } if (_form != null) { _progress.CloseFormSafe(); } return(sb.ToString()); }
public string Decrypt(string encryptedText) { string[] textNumb = encryptedText.Split('\n'); List <BigInteger> message = new List <BigInteger>(); for (int i = 0; i < textNumb.Length; ++i) { if (textNumb[i] != "" && textNumb[i] != "\r") { message.Add(BigInteger.Parse(textNumb[i])); } } if (_form != null) { _progress = new Utils.Progress(0, message.Count, 1, "Дешифрование"); _progress.Show(); } BigInteger h = BigInteger.ModPow(_p, _key, _q); byte[] decryptedMessage = new byte[message.Count]; for (int i = 0; i < message.Count; ++i) { decryptedMessage[i] = (byte)(message[i] / h); if (_form != null) { _progress.PerformStep(); } } if (_form != null) { _progress.CloseFormSafe(); string curExt = WordPad.Helpers.ReadHelper.GetExtention(_form.Text); if (WordPad.Form1.TxtExts.Any(str => str == curExt)) { return(Encoding.Default.GetString(decryptedMessage)); } else { StringBuilder sb = new StringBuilder(); foreach (var b in decryptedMessage) { sb.Append($"{b} "); } return(sb.ToString()); } } return(Encoding.Default.GetString(decryptedMessage)); }
public void GenerateSequence(object sender, EventArgs e) { string result = Interaction.InputBox("Введите длину генерируемой последовательности (10000)"); int seqLength = 10000; try { int tLen = Int32.Parse(result); seqLength = tLen; } catch (FormatException e2) { MessageBox.Show("Неверное число"); } catch (OverflowException e3) { MessageBox.Show("Переполнение"); } Utils.Progress progressForm = new Utils.Progress(0, seqLength, 1, "Gen progress"); progressForm.Show(); Thread genThread = new Thread(() => { GenerateSequenceAbstract(seqLength, ref progressForm); }); genThread.Start(); }