public static void execute() { log.Info("Задание №5. Электронная цифровая подпись. Используя хеш-образ своей Фамилии, вычислите электронную цифровую подпись по схеме RSA.\n"); log.Info(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>\n\n"); Console.Clear(); Console.WriteLine("Задание №5"); Console.Write("Введите p -> "); int p = Convert.ToInt32(Console.ReadLine()); log.Info("p = {}", p); Console.Write("Введите q -> "); int q = Convert.ToInt32(Console.ReadLine()); log.Info("q = {}", q); Console.Write("Введите номер варианта -> "); int H = Convert.ToInt32(Console.ReadLine()); log.Info("H = {}", H); int n = p * q; log.Info("n = p*q = {}", n); int f_n = (p - 1) * (q - 1); log.Info("Функция Эйлера = {0}", f_n); int param_d = HELP.getD(f_n); log.Info("d = {0}", f_n); int param_e = HELP.getE(param_d, f_n); log.Info("e = {0}", f_n); Console.WriteLine("Открытый ключ = ({0},{1})", param_e, n); log.Info("Открытый ключ ({0},{1})", param_e, n); Console.WriteLine("Секретный ключ = ({0},{1})\n\n", param_d, n); log.Info("Секретный ключ ({0},{1})", param_d, n); Console.Write("Введите сообщение -> "); string text = Console.ReadLine(); log.Info("Сообщение = {}", text); H = HELP.getHash(text, H, n, log); Console.WriteLine("Хэш {0} -> {1}\n", text, Convert.ToString(H)); log.Info("Хэш {0} -> {1}", text, Convert.ToString(H)); int key1 = param_e; int key2 = n; BigInteger b1 = new BigInteger(H); b1 = BigInteger.Pow(b1, key1); b1 %= key2; string ECP = b1.ToString(); Console.WriteLine("ХЕШ {0} -> ЭЦП {1}. (Согласно открытым ключам)\n", Convert.ToString(H), ECP); log.Info("ХЕШ {0} -> ЭЦП {1}. (Согласно открытым ключам)\n", Convert.ToString(H), ECP); key1 = param_d; BigInteger b2 = new BigInteger(Convert.ToInt32(ECP)); b2 = BigInteger.Pow(b2, key1); b2 %= key2; string ECPcheck = b2.ToString(); Console.WriteLine("Проверка ЭЦП {0} -> {1}. (Согласно серктным ключам)\n", ECP, ECPcheck); log.Info("Проверка ЭЦП {0} -> {1}. (Согласно серктным ключам)\n", ECP, ECPcheck); Console.WriteLine("Подробности в логах."); Console.WriteLine("Чтобы вернуться в меню нажмите Enter..."); Console.ReadLine(); }
public static void execute() { log.Info("Задание №3. Алгоритм шифрования RSA. Сгенерируйте открытый и\nзакрытый ключи в алгоритме шифрования RSA, выбрав простые числа p и q\nиз первой сотни. Зашифруйте сообщение, состоящее из ваших инициалов: ФИО.\n"); log.Info(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>\n\n"); Console.Clear(); Console.WriteLine("Задание №3"); Console.Write("Введите p -> "); int p = Convert.ToInt32(Console.ReadLine()); log.Info("p = {}", p); Console.Write("Введите q -> "); int q = Convert.ToInt32(Console.ReadLine()); log.Info("q = {}", q); int pq = p * q; log.Info("p*q = {}", pq); int f_n = (p - 1) * (q - 1); log.Info("Функция Эйлера = {0}", f_n); int param_d = HELP.getD(f_n); log.Info("d = {0}", f_n); int param_e = HELP.getE(param_d, f_n); log.Info("e = {0}", f_n); Console.WriteLine("Открытый ключ = ({0},{1})", param_e, pq); log.Info("Открытый ключ ({0},{1})", param_e, pq); Console.WriteLine("Секретный ключ = ({0},{1})\n\n", param_d, pq); log.Info("Секретный ключ ({0},{1})", param_d, pq); Console.WriteLine("Шифрование\n"); Console.Write("Введите текст шифруемого сообщения -> "); byte[] text = Encoding.GetEncoding(1251).GetBytes(Console.ReadLine()); string code = ""; foreach (byte temp in text) { BigInteger b = new BigInteger(temp); b = BigInteger.Pow(b, param_e); b %= pq; code += b.ToString() + ","; } code = code.Remove(code.Length - 1); Console.WriteLine("Зашифрованное сообщение -> {0}\n\n", code); log.Info("Сообщение {0} -> Шифр {1}", Encoding.GetEncoding(1251).GetString(text), code); Console.WriteLine("Расшифрование\n"); Console.Write("Введите текст зашифрованного сообщения -> "); string encodedText = Console.ReadLine(); byte[] decodedText = new byte[encodedText.Split(',').Length]; int counter = 0; foreach (string temp in encodedText.Split(',')) { int num = Convert.ToInt32(temp); BigInteger b = new BigInteger(num); b = BigInteger.Pow(b, param_d); b %= pq; decodedText[counter++] = Convert.ToByte(b.ToString()); } Console.WriteLine("Расшифрованное сообщение -> {0}\n\n", Encoding.GetEncoding(1251).GetString(decodedText)); log.Info("Шифр {0} -> Сообщение {1}\n", encodedText, Encoding.GetEncoding(1251).GetString(decodedText)); Console.WriteLine("Подробности в логах."); Console.WriteLine("Чтобы вернуться в меню нажмите Enter..."); Console.ReadLine(); }