public static void execute() { log.Info("Задание №2. Алгоритм шифрования ГОСТ 28147-89. Выполните первый цикл\nалгоритма шифрования ГОСТ 28147 89 в режиме простой замены. Для\nполучения 64 бит исходного текста используйте 8 первых букв из своих\nданных: Фамилии Имени Отчества. Для получения ключа (256 бит)\nиспользуют текст, состоящий из 32 букв. Первый подключ содержит первые 4 буквы.\n"); log.Info(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>\n\n"); Console.Clear(); Console.WriteLine("Задание №2"); //Ввод и перевод в двоичную систему Console.Write("Введите исходный текст (8 букв) -> "); string TXT = Console.ReadLine(); string TXT_bi = HELP.getBiFromStr(TXT); log.Info("Перевод входящего сообщения {0} в двоичный код (кодировка ASCII) = {1}\n", TXT, TXT_bi); Console.Write("Введите подключ (4 букв) -> "); string x0 = Console.ReadLine(); string x0_bi = HELP.getBiFromStr(x0); log.Info("Перевод подключа {0} в двоичный код (кодировка ASCII) = {1}\n", x0, x0_bi); List <int> L0 = HELP.getL0(HELP.str2list(TXT_bi)); log.Info("L0 = {}", HELP.list2str(L0)); List <int> R0 = HELP.getR0(HELP.str2list(TXT_bi)); log.Info("R0 = {}", HELP.list2str(R0)); List <int> sum_mod_32 = F_R0X0(R0, HELP.str2list(x0_bi)); log.Info("Результат суммирования R0 + X0 по mod 2^32 = {0}\n", HELP.list2str(sum_mod_32)); sum_mod_32 = replace(sum_mod_32); log.Info("Результат суммирования R0 + X0 по mod 2^32 преобразуем в блоке подстановки.\nРезультат подстановки = {0}\n", HELP.list2str(sum_mod_32)); sum_mod_32 = leftShift(sum_mod_32); log.Info("После циклического сдвига на 11 = {0}\n", HELP.list2str(sum_mod_32)); long a = Convert.ToInt64(HELP.list2str(L0), 2); long b = Convert.ToInt64(HELP.list2str(sum_mod_32), 2); long R1 = a ^ b; log.Info("Результат. R1 = {0}", Convert.ToString(R1, 2).PadLeft(32, '0')); Console.WriteLine("Результат R1 = {0}", Convert.ToString(R1, 2).PadLeft(32, '0')); Console.WriteLine("Подробности в логах."); Console.WriteLine("Чтобы вернуться в меню нажмите Enter..."); Console.ReadLine(); }
public static void execute() { log.Info("Задание №1. Алгоритм шифрования DES. Выполните первый цикл алгоритма\nшифрования DES. Для получения 64 бит исходного текста используйте 8\nпервых букв из своих данных: Фамилии Имени Отчества. Для получения\nключа (256 бит) используют текст, состоящий из 32 букв.\n"); log.Info(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>\n\n"); Console.Clear(); Console.WriteLine("Задание №1"); //Ввод и перевод в двоичную систему Console.Write("Введите исходный текст (8 букв) -> "); string TXT = Console.ReadLine(); string TXT_bi = HELP.getBiFromStr(TXT); Console.Write("Введите подключ (7 букв) -> "); string X0 = Console.ReadLine(); string X0_bi = HELP.getBiFromStr(X0); //Логируем промежуточные значение log.Info("Перевод входящего сообщения {0} в двоичный код (кодировка ASCII) = {1}\n", TXT, TXT_bi); log.Info("Перевод первого подключа {0} в двоичный код (кодировка ASCII) X0 = {1}\n", X0, X0_bi); List <int> x0 = reducingX0(X0_bi); log.Info("Уменьшаем длину ключа X0 до 48 бит\n Результат Х0 = {0}\n", HELP.list2str(x0)); List <int> txt_bi = replaceTXT(HELP.str2list(TXT_bi)); log.Info("Выполняем операцию перестановки битовой последовательности исходного сообщения.\nРезультат = {0}\n", HELP.list2str(txt_bi)); List <int> L0 = HELP.getL0(txt_bi); log.Info("Получаем L0 = {0}\n", HELP.list2str(L0)); List <int> R0 = HELP.getR0(txt_bi); log.Info("Получаем R0 = {0}\n", HELP.list2str(R0)); R0 = extendingR0(R0); log.Info("Расширенный R0 = {0}\n", HELP.list2str(R0)); long a = Convert.ToInt64(HELP.list2str(R0), 2); long b = Convert.ToInt64(HELP.list2str(x0), 2); List <int> sumXORO = HELP.str2list(Convert.ToString(a ^ b, 2)); while (sumXORO.Count < 48) { sumXORO.Insert(0, 0); } log.Info("Результат сложения X0 и R0 = {0}\n", HELP.list2str(sumXORO)); sumXORO = substitutionsSBox(sumXORO); log.Info("Результат подстановок из таблиц = {0}\n", HELP.list2str(sumXORO)); sumXORO = replaceAfterSbox(sumXORO); log.Info("Результат перестановки = {0}\n", HELP.list2str(sumXORO)); sumXORO.AddRange(L0); log.Info("Обхединение R и L = {0}\n", HELP.list2str(sumXORO)); List <int> result = permutations(sumXORO); log.Info("Итоговая перестановка. Результат = {0}\n", HELP.list2str(result)); Console.WriteLine("Результат = {0}", HELP.list2str(result)); Console.WriteLine("Подробности решения в логах."); Console.WriteLine("Чтобы вернуться в меню нажмите Enter..."); Console.ReadLine(); }