Esempio n. 1
0
        private void button1_Click(object sender, EventArgs e)
        {
            richTextBox1.Clear();
            richTextBox2.Clear();

            byte[]     gByte = Encoding.Default.GetBytes(textBox1.Text);
            BigInteger g     = new BigInteger(gByte);
            BigInteger p     = new BigInteger(Convert.ToInt64(textBox2.Text));

            cript  server = new cript();
            Random rnd    = new Random();

            RSAParameters BobPublicRsaPara = server.GetPublicRsaPara(cript.ClientName.Bob);
            BigInteger    BobModulus       = new BigInteger(BobPublicRsaPara.Modulus);
            BigInteger    BobExponent      = new BigInteger(BobPublicRsaPara.Exponent);
            string        sBobPublicPara   = BobExponent.ToString() + ", " + BobModulus.ToString();

            textBox3.Text = sBobPublicPara;

            RSAParameters AlicePublicRsaPara = server.GetPublicRsaPara(cript.ClientName.Alice);
            BigInteger    AliceModulus       = new BigInteger(AlicePublicRsaPara.Modulus);
            BigInteger    AliceExponent      = new BigInteger(AlicePublicRsaPara.Exponent);
            string        sAlicePublicPara   = AliceExponent.ToString() + ", " + AliceModulus.ToString();

            textBox4.Text = sAlicePublicPara;

            int x, y;

            x = rnd.Next(2, Convert.ToInt32(textBox2.Text));
            y = rnd.Next(2, Convert.ToInt32(textBox2.Text));

            BigInteger ma, mb, Ka, Kb;

            ma = BigInteger.ModPow(g, x, p);
            mb = BigInteger.ModPow(g, y, p);

            richTextBox1.AppendText("1) Сгенерированное X=" + x.ToString() + "\nОтправлено Бобу(g^xmodp):" + ma.ToString() + "\n");

            richTextBox2.AppendText("2) Получено от Алисы:" + ma.ToString() + "\n");
            richTextBox2.AppendText("3) Сгенерированное Y=" + y.ToString() + "\n");

            Ka = BigInteger.ModPow(mb, x, p);
            Kb = BigInteger.ModPow(ma, y, p);

            richTextBox2.AppendText("Созданный сеансовый ключ K=" + Kb.ToString() + "\n");

            String AIv = "", BIv = "";

            try
            {
                server.InitAesProvider(cript.ClientName.Alice, Ka.ToString(), AIv);
                server.InitAesProvider(cript.ClientName.Bob, Kb.ToString(), BIv);
            }
            catch (Exception ex)
            {
                richTextBox1.AppendText(ex.Message);
                return;
            }

            string MesForAlis = ma.ToString() + "," + mb.ToString();

            byte[] BobSign = server.RsaSign(cript.ClientName.Bob, Encoding.Default.GetBytes(MesForAlis));
            byte[] Ekb     = server.Encrypt(cript.ClientName.Bob, Encoding.Default.GetString(BobSign));
            richTextBox2.AppendText("Отправлено Алисе(mb+Ek(Signb(ma,mb):\n" + mb.ToString() + "," + Encoding.Default.GetString(Ekb) + "\n");

            richTextBox1.AppendText("4) Получено от Боба:\n" + mb.ToString() + "," + Encoding.Default.GetString(Ekb));
            richTextBox1.AppendText("\nСозданный сеансовый ключ K=" + Ka.ToString() + "\n\n");

            string recMessageAlice = server.Decrypt(cript.ClientName.Bob, Ekb);

            richTextBox1.AppendText("Расшифрованное сообщение:\n" + recMessageAlice + "\n");

            using (SHA256CryptoServiceProvider sha256 = new SHA256CryptoServiceProvider())
            {
                byte[] hash = sha256.ComputeHash(Encoding.Default.GetBytes(MesForAlis));
                if (server.RsaVerify(cript.ClientName.Bob, hash, BobSign))
                {
                    richTextBox1.AppendText("\nПодпись валидна\n");
                }
                else
                {
                    richTextBox1.AppendText("\nПодпись не валидна\n");
                }
            }

            string MesForBob = ma.ToString() + "," + mb.ToString();

            byte[] AlisSign = server.RsaSign(cript.ClientName.Alice, Encoding.Default.GetBytes(MesForBob));
            byte[] Eka      = server.Encrypt(cript.ClientName.Alice, Encoding.Default.GetString(AlisSign));
            richTextBox1.AppendText("5) Сообщение для Боба(Ek(Signa(ma,mb))):\n" + Encoding.Default.GetString(Eka));

            richTextBox2.AppendText("\n6) Получено от Алисы:\n" + Encoding.Default.GetString(Eka));

            string recMessageBob = server.Decrypt(cript.ClientName.Alice, Eka);

            richTextBox2.AppendText("\n\nРасшифрованное сообщение:\n" + recMessageBob + "\n");

            using (SHA256CryptoServiceProvider sha256 = new SHA256CryptoServiceProvider())
            {
                byte[] hash = sha256.ComputeHash(Encoding.Default.GetBytes(MesForBob));
                if (server.RsaVerify(cript.ClientName.Alice, hash, AlisSign))
                {
                    richTextBox2.AppendText("\nПодпись валидна\n");
                }
                else
                {
                    richTextBox2.AppendText("\nПодпись не валидна\n");
                }
            }
        }
Esempio n. 2
0
        private void button1_Click(object sender, EventArgs e)
        {
            richTextBox1.Clear();
            richTextBox2.Clear();
            byte[]     gByte = Encoding.Default.GetBytes(textBox1.Text);
            byte[]     aByte, bByte;
            BigInteger g = new BigInteger(gByte);
            BigInteger p = new BigInteger(Convert.ToInt64(textBox2.Text));

            Random rnd = new Random();
            string aStr = "", bStr = "";

            for (int i = 0; i < 3; i++)
            {
                aStr += rnd.Next().ToString();
                bStr += rnd.Next().ToString();
            }

            aByte = Encoding.Default.GetBytes(aStr);
            bByte = Encoding.Default.GetBytes(bStr);
            BigInteger a = new BigInteger(aByte);
            BigInteger b = new BigInteger(bByte);

            textBox3.Text = a.ToString();
            textBox4.Text = b.ToString();

            BigInteger PKa, PKb;

            PKa = BigInteger.ModPow(g, a, p);
            PKb = BigInteger.ModPow(g, b, p);

            textBox6.Text = PKa.ToString();
            textBox7.Text = PKb.ToString();

            int x, y;

            x = rnd.Next(2, Convert.ToInt32(textBox2.Text) - 1);
            y = rnd.Next(2, Convert.ToInt32(textBox2.Text) - 1);

            BigInteger AlisMes, BobMes;

            AlisMes = BigInteger.ModPow(g, x, p);
            BobMes  = BigInteger.ModPow(g, y, p);
            richTextBox1.AppendText("1) Сгенерированное X=" + x.ToString() + "\nСообщение для Боба(g^xmodp):" + AlisMes.ToString() + "\n");
            richTextBox2.AppendText("2) Получено от Алисы:" + AlisMes.ToString() + "\nСгенерированное Y=" + y.ToString() + "\nСообщение для Алисы(g^xmodp):" + BobMes.ToString() + "\n");

            richTextBox1.AppendText("3) Получено от Боба:" + BobMes.ToString() + "\n");

            BigInteger Ka, Kb;

            Ka = BigInteger.ModPow(g, BigInteger.Add(BigInteger.Multiply(b, x), BigInteger.Multiply(y, a)), p);
            richTextBox1.AppendText("4) Создание сеансового ключа Ka=(g^b)^x*(g^y)^amodp=" + Ka.ToString() + "\n");

            Kb = BigInteger.ModPow(g, BigInteger.Add(BigInteger.Multiply(x, b), BigInteger.Multiply(a, y)), p);
            richTextBox2.AppendText("5) Создание сеансового ключа Kb=(g^x)^b*(g^a)^bmodp=" + Kb.ToString());

            if (Ka == Kb)
            {
                textBox5.Text = "Ключи совпали";
            }
            else
            {
                textBox5.Text = "Ключи не совпали";
            }
        }