예제 #1
0
        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) + " симв.)");
                }
            }
        }
예제 #2
0
        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;
                }
            }
        }
예제 #3
0
 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++;
             }
         }
     }
 }