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"); } } }
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 = "Ключи не совпали"; } }