ОСТОРОЖНО МОШЕННИКИ! В последнее время в соиальных сетях учстились случаи педложения помощи в написании прогамм от лиц, прикрвающихся сайтом vscode.ru. Мы никогда не пишем первыми и не размещаем никакие материалы в псторонних группах ВК. Для связи с нами используйте исключительно эти контакт: vscoderu@yandex.ru, https://vk.com/vscode


Алгоритм DES


Поговорим опять о шифровании. На этот раз рассмотрим алгоритм DES. DES — алгоритм блочного шифрования на основе сети Фейстеля, которая проходится 16 раз. DES может использоваться в нескольких режимах; мы рассмотрим режим «электронной кодовой книги» — ECB (electronic code book). Разработку будем вести на языке программирования C#.

Алгоритм DES. Описание

DES — блочный алгоритм, то есть при шифровании исходное сообщение переводится в двоичный код, а затем разбивается на блоки и каждый блок отдельно зашифровывается (расшифровывается). По стандарту (принят в 1977 году) размер блока DES равен 64 бита, то есть используя 8-ми битовую кодировку ASCII, применяемую в те времена, получим в одном блоке — 8 символов.

Теперь же в основном используется 16-ти битная кодировка Юникода (UTF-16), поэтому, чтобы сохранить длину блока равную 8-ми символам, увеличим размер блока DES до 128 бит.

Алгоритм DES. Шаги

Итак, для того, чтобы зашифровать сообщение алгоритмом DES, необходимо выполнить следующую последовательность шагов:

  • довести исходное сообщение до такого размера (в битах), чтобы оно нацело делилось на размер блока (sizeOfBlock = 128 бит);
  • разделить исходное сообщение на блоки;
  • довести длину ключа до длины половины блока;
  • перевести ключ в бинарный формат (в нули и единицы);
  • провести над каждым блоком прямое преобразование сетью Фейстеля в течении 16-ти раундов. После каждого раунда необходимо выполнять циклический сдвиг ключа на заданное количество символов;
  • соединить все блоки вместе; таким образом получим сообщение, зашифрованное алгоритмом DES.

Расшифровка DES производится по аналогии. Используется обратное преобразование сетью Фейстеля.

Алгоритм DES. Сеть Фейстеля

Сеть Фейстеля используется в алгоритме DES для зашифровывания (прямое преобразование сетью) и расшифровывания (обратное преобразование). Эти преобразования изображены на рисунках 1 и 2 соответственно.

DES. Прямое преобразование сетью Фейстеля

Рисунок 1. Прямое преобразование сетью Фейстеля

DES. Обратное преобразование сетью Фейстеля

Рисунок 2. Обратное преобразование сетью Фейстеля

Чтобы вам было понятнее, давайте рассмотрим один раунд прямого преобразования сетью Фейстеля.

На i-й итерации исходный блок делится пополам — левая часть обозначается L, правая R. Над R и ключом ki вычисляется какая-либо выбранная логическая функция f (мы будем использовать XOR). Затем выполняется вычисление логической операции «исключающее или» над L и вычисленным ранее значением функции (L xor f). Старое значение R переносится в левую часть блока, а в правую часть заносится значение L xor f. И последняя операция раунда — нужно выполнить циклический сдвиг ключа: keyi+1 = keyi >> shiftKey (при расшифровке keyi-1 = keyi << shiftKey); shiftKey — количество символов, на которое необходимо циклически сдвинуть ключ.


Алгоритм DES. Программная реализация

Создадим для разрабатываемой программы следующий интерфейс (рисунок 3).

Пользовательский интерфейс программы DES

Рисунок 3. Пользовательский интерфейс программы

Объявим ряд переменных, требующихся для программы.

Напишем методы, реализующие необходимый функционал для программы DES.

Метод, доводящий строку до такого размера, чтобы она делилась на sizeOfBlock. Размер увеличивается с помощью добавления к исходной строке символа «решетка».

Метод, разбивающий строку в обычном (символьном) формате на блоки.

Метод, разбивающий строку в двоичном формате на блоки.

Метод, переводящий строку в двоичный формат.

Метод, доводящий длину ключа до нужной длины.

Один раунд шифрования алгоритмом DES.

Один раунд расшифровки алгоритмом DES.

XOR двух строк с двоичными данными.

Шифрующая функция f. Мы решили использовать в качестве нее также логическую операцию XOR.

Вычисление ключа для следующего раунда шифрования DES. Циклический сдвиг >> shiftKey.

Вычисление ключа для следующего раунда расшифровки DES. циклический сдвиг << shiftKey.

Метод, переводящий строку с двоичными данными в символьный формат.

Теперь реализуем функционал кнопки «Зашифровать».

И кнопки «Расшифровать».

Готово!

DES — демонстрация работы программы и исходник

На рисунках 4 и 5 представлена демонстрация работы написанной программы для шифрования алгоритмом DES.

DES - демонстрация работы программы

Рисунок 4. Демонстрация работы

Входные и выходные данные

Рисунок 5. Входные и выходные данные

Скачать исходник программы, написанной в Visual Studio 2013 на языке программирования C# можно, нажав на кнопку ниже.

Скачать исходник

 

 

4.5/5 - (35 голосов)



Поделиться в соц. сетях:

8 комментария(ев) к статье “Алгоритм DES

  1. Антон

    Добрый день. Скажите, пожалуйста, а это правильно, что какой бы я не ввел текст и ключ, текст кодируется в азиатские иероглифы?

    1. admin Автор статьи

      Добрый день, Антон! Да, это правильно.

      DES — побитовый алгоритм. После шифрования и преобразования закодированных битов в графическое представление символов, как правило, получаются иероглифы. Когда Вы расшифруете текст — всё пройдёт успешно.

      1. Владимир

        Здравствуйте, а откуда был взят данный алгоритм? Можно источник пожалуйста

  2. Ирина

    Добрый день! Скажите, пожалуйста, а в тестовый файл in нужно что то добавлять? И почему при расшифровки слова, в текстовом файле out2 отображаются иероглифы?

    1. admin Автор статьи

      Здравствуйте!

      Да, в текстовый файл in.txt нужно добавить тот текст, который нужно зашифровать.

      В выходном файле out2.txt должен быть исходный текст. Если возникают какие-то проблемы, то проблема с кодировкой файлов. У исходного файла выставите кодировку UTF-8 (без BOM) — сделать это можно, например, с помощью текстового редактора Notepad++.

  3. Вася

    Чуваки, ну вы молодцы, реально выручили, у всех будет такое точно на сдаче :))) !

Добавить комментарий

Ваш адрес email не будет опубликован.