Ejemplo n.º 1
0
        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;
                }
            }
        }