Пример #1
0
        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();
        }
Пример #2
0
        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();
        }