Beispiel #1
0
        // Получение параметра е
        private static List <BigInteger> GetEList(BigInteger fi)
        {
            var eList = new List <BigInteger>();
            var count = 0;

            //for (var number = 0; number < fi; number++)
            //{
            //    if (count == 200)
            //        return eList;

            //    if (BigIntegerUtils.IsPrime(number) &&
            //        BigIntegerUtils.IsRelativelyPrime(number, fi))
            //    {
            //        eList.Add(number);
            //        count++;
            //    }
            //}

            for (var number = fi - 1; number > 0; number--)
            {
                if (count == 200)
                {
                    return(eList);
                }

                if (BigIntegerUtils.IsPrime(number) &&
                    BigIntegerUtils.IsRelativelyPrime(number, fi))
                {
                    eList.Add(number);
                    count++;
                }
            }

            if (eList.Count > 0)
            {
                return(eList);
            }
            else
            {
                throw new Exception("e - не найдено");
            }
        }
Beispiel #2
0
        // Получение строки с простыми числами
        private static string GetPrimesNumbersString(int limit)
        {
            var stringBuilder = new StringBuilder();
            var count         = 0;

            for (var number = 2; count <= limit; number++)
            {
                if (BigIntegerUtils.IsPrime(number))
                {
                    if (count == limit)
                    {
                        stringBuilder.Append(number);
                    }
                    else
                    {
                        stringBuilder.Append($"{number}, ");
                    }

                    count++;
                }
            }

            return(stringBuilder.ToString());
        }
Beispiel #3
0
        static void Main()
        {
            while (true)
            {
                Console.Write("Введите одну из команд (encode/decode/exit): ");
                var inputStr = Console.ReadLine().ToLower();

                if (inputStr == "exit")
                {
                    break;
                }

                if (inputStr == "encode")
                {
                    Console.WriteLine($"Введите p и q ({GetPrimesNumbersString(200)}):");
                    BigInteger p, q;
                    while (true)
                    {
                        try
                        {
                            Console.Write("p = ");
                            p = BigInteger.Parse(Console.ReadLine());
                            Console.Write("q = ");
                            q = BigInteger.Parse(Console.ReadLine());

                            if (!BigIntegerUtils.IsPrime(p) || !BigIntegerUtils.IsPrime(q))
                            {
                                throw new Exception();
                            }
                            break;
                        }
                        catch
                        {
                            Console.WriteLine("Значение p или q неверно");
                            continue;
                        }
                    }

                    RSA.Encode(p, q,
                               @"C:\Users\amx\Desktop\RSALab\RSALab\input.txt",
                               @"C:\Users\amx\Desktop\RSALab\RSALab\output.txt");
                }


                if (inputStr == "decode")
                {
                    Console.WriteLine("Введите открытый ключ (d, n): ");
                    BigInteger d, n;
                    while (true)
                    {
                        try
                        {
                            Console.Write("d = ");
                            d = BigInteger.Parse(Console.ReadLine());
                            Console.Write("n = ");
                            n = BigInteger.Parse(Console.ReadLine());
                            break;
                        }
                        catch
                        {
                            Console.WriteLine("Значение d или n неверно");
                            continue;
                        }
                    }

                    RSA.Decode(d, n,
                               @"C:\Users\s***n\source\repos\RSALab\RSALab\input.txt",
                               @"C:\Users\s***n\source\repos\RSALab\RSALab\output.txt");
                }
            }
        }
Beispiel #4
0
        // Подсчет параметра d
        private static BigInteger CalculateD(BigInteger e, BigInteger n)
        {
            var d = BigIntegerUtils.ModInverse(e, n);

            return(e * d % n == 1 ? d : -1);
        }