private void f5_buttonSetKeys_Click(object sender, EventArgs e) { f5_textP.Text = new string(f5_textP.Text.Where(t => char.IsDigit(t)).ToArray()); f5_textQ.Text = new string(f5_textQ.Text.Where(t => char.IsDigit(t)).ToArray()); f5_textG.Text = new string(f5_textG.Text.Where(t => char.IsDigit(t)).ToArray()); BigInteger p = 0, q = 0, g = 0; if (f5_textP.TextLength > 0 && f5_textQ.TextLength > 0 && f5_textG.TextLength > 0 && RabinMiller.IsPrime(p = BigInteger.Parse(f5_textP.Text), 10) && RabinMiller.IsPrime(q = BigInteger.Parse(f5_textQ.Text), 10) && ((g = BigInteger.Parse(f5_textG.Text)) >= 2) && g < p - 1 && NumberTheory.BinaryModPow(g, q, p) != 1) { if (p > MyAlphabets.AllTypesTogether.Length) { DiffieHellman.Params.P = p; DiffieHellman.Params.Q = q; DiffieHellman.Params.G = g; f5_buttonSetKeys.Enabled = false; f5_buttonClearKeys.Enabled = true; f5_buttonNextPrime.Enabled = false; f5_buttonNextGenerator.Enabled = false; f5_textQ.ReadOnly = true; f5_textG.ReadOnly = true; f5_button_SetSecretA.Enabled = true; f5_button_GetRandomSecretA.Enabled = true; f5_textSecretA.ReadOnly = false; f5_button_SetSecretB.Enabled = true; f5_button_GetRandomSecretB.Enabled = true; f5_textSecretB.ReadOnly = false; } else { MessageBox.Show("Пожалуйста, выберите значение P больше длины используемого алфавита (" + Convert.ToString(MyAlphabets.AllTypesTogether.Length) + " симв.)"); } } }
private void f4_buttonSetKeys_Click(object sender, EventArgs e) { f4_textP.Text = new string(f4_textP.Text.Where(t => char.IsDigit(t)).ToArray()); if (f4_textP.TextLength > 0) { if (RabinMiller.IsPrime(BigInteger.Parse(f4_textP.Text), 10)) { f4_textP.ReadOnly = true; f4_buttonNextPrime.Enabled = false; f4_buttonSetKeys.Enabled = false; f4_buttonClearKeys.Enabled = true; f4_textCa.ReadOnly = false; f4_textCb.ReadOnly = false; f4_textBox_MessageAlice.ReadOnly = false; f4_button_GetRandomCa.Enabled = true; f4_button_GetRandomCb.Enabled = true; f4_button_SetCa.Enabled = true; f4_button_SetCb.Enabled = true; } } }
static void Main(string[] args) { if (args.Length > 0 && args[1] == "--test") { BigInteger prime; String[] primes; using (StreamReader sr = new StreamReader("possiblePrimes.txt")) { String bigint = sr.ReadToEnd(); primes = bigint.Split('\n'); } for (int p = 0; p < primes.Length; p++) { BigInteger.TryParse(primes[p], out prime); for (int i = 0; i < 128; i++) { if (RabinMiller.isPrime(prime, 1)) { Console.WriteLine($"Prime {p}, Iteration {i}: Prime"); } else { Console.WriteLine($"Prime {p}: Not Prime"); } } } } else { BigInteger perfect; using (StreamReader sr = new StreamReader("perfectNumber.txt")) { String bigint = sr.ReadToEnd(); BigInteger.TryParse(bigint, out perfect); } if (perfect % 2 == 0) { perfect++; } if (perfect % 5 == 0) { perfect += 2; } List <BigInteger> primes = new List <BigInteger>(); Random rand = new Random(); int log = (int)BigInteger.Log10(perfect) + 1; Console.WriteLine("This number has {0} digits", log); try { File.Delete("possiblePrimes.txt"); } catch (DirectoryNotFoundException) { } int solutions = 0; foreach (BigInteger i in Fluctuate(perfect, max:log / 2, repeats:100)) { if (RabinMiller.isPrime(i, 1)) { if (solutions == 0) { File.WriteAllText("possiblePrimes.txt", String.Format("{0}\n", i)); } else { File.AppendAllText("possiblePrimes.txt", String.Format("{0}\n", i)); } Console.WriteLine("Possible prime found"); solutions++; } } } }