private void buttonShifr_Click(object sender, EventArgs e) { if (textBox.Text == "") { labelInform.Text = "Шифровать нечего. Поле пустое."; } else { BigInteger p = new BigInteger(textBoxP.Text); BigInteger q = new BigInteger(textBoxQ.Text); //Cоздаем класс RSA RSA rsa = new RSA(p, q); labelInform.Text = "Приватный ключ: " + rsa.privateKey.ToString() + "\n"; labelInform.Text = labelInform.Text + "Публичный ключ: " + rsa.publicKey.ToString() + "\n"; //Cчитываем сообщение, которое необходимо зашифровать string s = textBox.Text; //Генерируем алфавит RSA.GenerateInform(); //Преобразовываем строку в длинное число для шифрования BigInteger num = RSA.GetBigInt(s); //Выводим получившееся длинное число в строку информации labelInform.Text = labelInform.Text + "Сообщение преобразовано в длинное число:\n" + num.ToString() + "\n"; try { int i = 1; //с какой позиции начинается очередной блок int len = 0; //размер блока BigInteger crypt = new BigInteger("0"); List <BigInteger> cr = new List <BigInteger>(); string nn = num.ToString(); while (i < nn.Length)//пока не весь текст разбит на блоки { len += 2; string temp = nn.Substring(i, len); if (new BigInteger(temp).CompareTo(rsa.n) >= 0) { temp = nn.Substring(i, len - 2); cr.Add(new BigInteger(temp)); i += len; i -= 2; //--i; len = 0; } else if (i + len >= nn.Length) { temp = nn.Substring(i, len); cr.Add(new BigInteger(temp)); break; } } List <BigInteger> shifr = new List <BigInteger>(); foreach (BigInteger a in cr) { shifr.Add(rsa.Crypt(a)); } List <BigInteger> shifr2 = new List <BigInteger>(); foreach (BigInteger a in shifr) { shifr2.Add(rsa.Decrypt(a)); } string tmp = ""; foreach (BigInteger a in shifr2) { string t = a.ToString(); tmp = tmp + RSA.GetText(a); } //Расшифрованное сообщение labelInform.Text = labelInform.Text + "Зашифрованное сообщение:\n" + tmp + "\n"; } catch (Exception ex) { labelInform.Text = labelInform.Text + ex.Message; } } }