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(textBox4.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); textBox2.Text = a.ToString(); textBox3.Text = b.ToString(); BigInteger AlisMes, BobMes; AlisMes = BigInteger.ModPow(g, a, p); BobMes = BigInteger.ModPow(g, b, p); richTextBox1.AppendText("1) Отправлено Бобу:\n" + AlisMes.ToString() + "\n"); richTextBox2.AppendText("2) Получено от Алисы:\n" + AlisMes.ToString() + "\n"); richTextBox2.AppendText("Отпралено Алисе:\n" + BobMes.ToString() + "\n"); richTextBox1.AppendText("3) Получено от Боба:\n" + BobMes.ToString() + "\n"); BigInteger Ka = BigInteger.ModPow(BobMes, a, p); richTextBox1.AppendText("Ka=:" + Ka.ToString() + "\n"); BigInteger Kb = BigInteger.ModPow(AlisMes, b, p); richTextBox2.AppendText("Kb=:" + Kb.ToString() + "\n"); if (Ka == Kb) { textBox5.Text = "Ключи совпали"; } else { textBox5.Text = "Ключи не совпали"; } }
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 = "Ключи не совпали"; } }