// Получение параметра е 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 - не найдено"); } }
// Получение строки с простыми числами 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()); }
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"); } } }