Разработка криптографической программы (стандарт DES)

  • Вид работы:
    Курсовая работа (т)
  • Предмет:
    Информационное обеспечение, программирование
  • Язык:
    Русский
    ,
    Формат файла:
    MS Word
    1,04 Мб
  • Опубликовано:
    2013-06-15
Вы можете узнать стоимость помощи в написании студенческой работы.
Помощь в написании работы, которую точно примут!

Разработка криптографической программы (стандарт DES)

Федеральное государственное бюджетное образовательное учреждение высшего профессионального образования

Дальневосточный государственный университет путей сообщения

Кафедра «ИТиС»








Курсовой проект

«Разработка криптографической программы (стандарт DES)»

Выполнил: Пинаев П.С.,

студент группы 23К.

Проверил: Анисимов В.В.








Хабаровск 2013 г.

Оглавление

1. Краткие сведения о стандарте шифрования DES

. Режим DES-ECB

.1 Общая схема шифрования

.2 Пример шифрования и расшифрования

. Режим DES-CBC

.1 Общая схема шифрования

.2 Пример шифрования и расшифрования

. Режим тройной DES

.1 Общие схемы шифрования

.2 Пример шифрования и расшифрования

. Руководство пользователя программы

5.1 Общие сведения

5.2 Назначение программы

5.3 Используемые технические средства

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

5.5 Ввод в действие программного средства

5.5.1 Интерфейс

5.5.2 Использование программного средства

6. Код программы


Задание на выполнение курсового проекта


Разработать программу, реализующую процедуры шифрования и расшифрования по стандарту DES (Data Encryption Standard). В программе предусмотреть возможность шифрования/расшифрования в режимах: электронная кодовая книга ЕСВ, сцепление блоков шифра СВС, тройной DES (EEE3, EDE3, EEE2 и EDE2). Программа должна выдавать промежуточные результаты шифрования/расшифрования.


1. Краткие сведения о стандарте шифрования DES

(Data Encryption Standard) симметричный алгоритм шифрования, разработанный фирмой IBM и утвержденный правительством США в 1977 году как официальный стандарт (FIPS 46-3). DES имеет блоки по 64 бита и 16 цикловую структуру сети Фейстеля. Для шифрования использует ключ с длиной 56 бит. Алгоритм использует комбинацию нелинейных (S-блоки) и линейных (перестановки E, IP, IP-1) преобразований. Для DES рекомендовано несколько режимов использования:

·        режим электронной кодовой книги (ECB - Electronic Code Book),

·        режим сцепления блоков (СВС - Cipher Block Chaining),

·        режим обратной связи по шифротексту (CFB - Cipher Feed Back),

·        режим обратной связи по выходу (OFB - Output Feed Back).

Прямым развитием DES в настоящее время является Triple DES.

Основные достоинства алгоритма DES:

·        используется только один ключ длиной 56 битов;

·        зашифровав сообщение с помощью одного пакета, для расшифровки вы можете использовать любой другой;

·        относительная простота алгоритма обеспечивает высокую скорость обработки информации;

·        достаточно высокая стойкость алгоритма.

 



2. Режим DES-ECB


В этом режиме исходный файл M разбивается на 64-битовые блоки (по 8 байтов): M = M(1)M(2)...M(n). Каждый из этих блоков кодируется независимо с использованием одного и того же ключа шифрования. Основное достоинство этого алгоритма - простота реализации. Недостаток - относительно слабая устойчивость против квалифицированных криптоаналитиков. В частности, не рекомендуется использовать данный режим работы для шифрования EXE файлов, потому что первый же блок - заголовок файла, является вполне удачным началом для взлома всего шифра.

В то же время следует признать, что этот режим в силу своей простой реализации наиболее популярен.

2.1 Общая схема шифрования


Процесс шифрования заключается в начальной перестановке битов 64-битового блока, шестнадцати циклах шифрования и обратной перестановки битов (рисунок 1). Все перестановки и коды в таблицах подобраны разработчиками таким образом, чтобы максимально затруднить процесс расшифровки путем подбора ключа. Структура алгоритма DES приведена на рисунке 2.


Рисунок 1. Обобщенная схема шифрования

Из шифруемой последовательности байт выбирается очередной 8-байтовый блок T, который преобразуется с помощью матрицы начальной перестановки IP (таблица 1) следующим образом: бит 58 блока T становится битом 1, бит 50 - битом 2 и т.д., что даст в результате: T(0) = IP(T).

Полученная последовательность битов T(0) разделяется на две последовательности по 32 бита каждая: L(0) - левые или старшие биты, R(0) - правые или младшие биты.


Рисунок 2. Структура алгоритма шифрования DES

Таблица 1. Матрица начальной перестановки IP

Затем выполняется шифрование, состоящее из 16 итераций. Результат i-й итерации описывается следующими формулами:


Функция f называется функцией шифрования. Ее аргументы - это 32-битовая последовательность R(i-1), полученная на (i-1)-ой итерации, и 48-битовый ключ K(i), который является результатом преобразования 64-битового ключа K.

На 16-й итерации получают последовательности R(16) и L(16) (без перестановки), которые конкатенируют в 64-битовую последовательность R(16)L(16). Затем позиции битов этой последовательности переставляют в соответствии с матрицей  (Таблица 2).

Таблица 2. Матрица конечной перестановки

Матрицы IP-1 и IP соотносятся следующим образом: значение 1-го элемента матрицы равно 40, а значение 40-го элемента матрицы IP равно 1, значение 2-го элемента матрицы  равно 8, а значение 8-го элемента матрицы IP равно 2 и т.д.

Аргументами функции f являются 32-битовый вектор  и 48-битовый ключ , который является результатом преобразования 56-битового исходного ключа шифра K.

Для вычисления функции f последовательно используются функция расширения E, сложение по модулю 2 с ключом , преобразование S, состоящее из 8 преобразований S-блоков , перестановка P.

Функция E расширяет 32-битовый вектор  до 48-битового вектора E путём дублирования некоторых битов из . Порядок битов вектора указан в таблице 3.

Полученный после перестановки блок складывается по модулю 2 с ключами и затем представляется в виде восьми последовательных блоков.


Таблица 3. Функция расширения E

Каждый блок  является 6-битовым блоком. Далее каждый из блоков трансформируется в 4-битовый блок с помощью соответствующего узла замены Sj (таблица 3).


Таблица 4. Узлы замены

Если на вход Sj поступает блок , то двухбитовое число  указывает номер строки матрицы, а четырёхбитовое число  - номер столбца в таблице узлов замен. В результате применения узла замены Sj к блоку  получается число (от 0 до 15), которое преобразуется в .

Полученные восемь элементов tj вновь объединяются в 32-битовый блок H’. В H’ выполняется перестановка битов P (таблица 5).

Таблица 5. Перестановка Р

Результат последней операции и является выходным значением функции шифрования .

Ключевые элементы вырабатываются из ключа с использованием сдвигов и битовых выборок-перестановок. Таким образом, ключевые элементы состоят исключительно из битов исходного ключа, «перетасованных» в различном порядке. Схема выработки ключевых элементов показана на рисунке 3.

Рисунок 3. Схема выработки ключевых элементов

Изначально ключ состоит из 56 бит. Но для контроля целостности ключа при передачи, используют контроль четности. Для этого 56 битный ключ разбивают на блоки по 7 бит и к каждому блоку дописывают восьмой бит, являющийся битом четности. Таким образом получается ключ из 64 бит.

Выработка ключевых элементов из ключа K начинается со входной выборки-перестановки битов PC1 (таблица 6), которая отбирает 56 из 64 битов ключа и располагает их в другом порядке.

Таблица 6. Перестановка PC1

Результат выборки-перестановки K* разделяется на две 28-битовые части: старшую С1 и младшую D1. В зависимости от номера итерации обе части циклически сдвигаются на 1 или 2 бита влево согласно таблице 7.

Таблица 7. Циклический сдвиг

Из полученных блоков с помощью выходной битовой выборки-перестановки PC2 (таблица 8) отбираются первые 48 битов, которые и формируют очередной ключевой элемент.

Таблица 8. Перестановка PC2

Процедуры шифрования и дешифрования полностью идентичны, за исключением порядка использования ключевых элементов ki. При дешифровании данных все действия выполняются в обратном порядке. В 16 циклах дешифрования, в отличие от шифрования c помощью прямого преобразования сетью Фейстеля, здесь используется обратное преобразование сетью Фейстеля.


Схема дешифрования указана на рисунке 4.

Рисунок 4. Схема дешифрования алгоритма DES

2.2 Пример шифрования и расшифрования


Исходный текст: Pinaev

Ключ: Pavelll

Исходный блок бит... Блок № 0:

10010110 01110110 10000110 10100110 01101110 00000000 00000000

Перевернутые биты в блоке...:

01101001 01101110 01100001 01100101 01110110 00000000 00000000

Ключ из 56 бит:

__0011000__0101110__1100110__0101011__0110001__1011000__1101100__

Ключ из 64 бита, после добавления бит четности:

00110000 01011100 11001100 01010110 01100011 10110001 11011000

**********************ШИФРОВАНИЕ**********************

Исходное сообщение:

01101001 01101110 01100001 01100101 01110110 00000000 00000000

Начальная перестановка IP:

00100001 00110100 00011010 00000000 00111110 00000110 00100100 :

00100001 00110100 00011010 :

00111110 00000110 00100100

Ключ 64 бита. С битами четности:

00110000 01011100 11001100 01010110 01100011 10110001 11011000

ключ (56). Перестановка РС1:

10111101 01100010 11010011 00000001 11001000 11000111

ключ (28C (Left)):

1000 1011 1101 0110 0010 1101

ключ (28D (Right)):

0000 0001 1100 1000 1100 0111

Итерация №1

Ключ из 56 бит после циклического сдвига, итерация 1:

0110000000111001000110001110

Ключ из 48 бит. Перестановка РС2:

10010011 01001010 10100111 00011110 01000000 , Началась функция модификации f:

00111110 00000110 00100100

Перевели 32 в 48. результат функции расширения Е:

00000001 11111100 00000000 11000001 00001000 . побитово суммируем по модулю 2:

10010010 10110110 10100111 11011111 01001000

Преобразовали 48 в 32. С помощью узлов замены:

00111110 00011000 00110110

Перестановка бит в конце функции. Перестановка P:

01000010 10010110 01110110 после модификации. HPart XOR f(LPart,Key):

01100011 10100010 01101100

После обмена HPart:

00111110 00000110 00100100

После обмена LPart:

01100011 10100010 01101100

Итерация №16

Ключ из 56 бит после циклического сдвига, итерация 16:

0011000000011100100011000111

Ключ из 48 бит. Перестановка РС2:

00001110 10100011 10100101 01000101 00011001 , Началась функция модификации f:

11110001 10001000 11001010

Перевели 32 в 48. результат функции расширения Е:

11010111 10100011 11000101 00010110 01010101 . побитово суммируем по модулю 2:

11011001 00000000 01100000 01010011 01001100

Преобразовали 48 в 32. С помощью узлов замены:

01000111 11010100 00011011

Перестановка бит в конце функции. Перестановка P:

11001111 11011010 00001000 после модификации. HPart XOR f(LPart,Key):

11000010 01110111 11011110

Результат шифрования блока. Конечная перестановка IP-1:

10010111 10000101 01001011 00100101 11100100 11110111 10111011

Результат блока бит до перевертывания(исправление недочета BitArray)... Блок № 0:

10010111 10000101 01001011 00100101 11100100 11110111 10111011

Результат блока бит после перевертывания...:

11101001 10100001 11010010 10100100 00100111 11101111 11011101

Исходное зашифрованное сообщение: d-…K%дч»

Ключ: Pavelll

Исходный блок бит... Блок № 0:

11101001 10100001 11010010 10100100 00100111 11101111 11011101

Перевернутые биты в блоке...:

10010111 10000101 01001011 00100101 11100100 11110111 10111011

Ключ из 56 бит:

__0011000__0101110__1100110__0101011__0110001__1011000__1101100__

Ключ из 64 бита, после добавления бит четности:

00110000 01011100 11001100 01010110 01100011 10110001 11011000

**********************ДеШИФРОВАНИЕ**********************

Начальная перестановка IP:

11000010 01110111 11011110 11100110 11110001 10001000 11001010 :

11000010 01110111 11011110 :

11110001 10001000 11001010

Ключ 64 бита. С битами четности:

00110000 01011100 11001100 01010110 01100011 10110001 11011000

ключ (56). Перестановка РС1:

10111101 01100010 11010011 00000001 11001000 11000111

ключ (28C (Left)):

1000 1011 1101 0110 0010 1101

ключ (28D (Right)):

0000 0001 1100 1000 1100 0111

Итерация №1

Ключ из 56 бит после циклического сдвига, итерация 16:

0011000000011100100011000111

Ключ из 48 бит. Перестановка РС2:

00001110 10100011 10100101 01000101 00011001 , Началась функция модификации f:

11110001 10001000 11001010

Перевели 32 в 48. результат функции расширения Е:

11010111 10100011 11000101 00010110 01010101 . побитово суммируем по модулю 2:

11011001 00000000 01100000 01010011 01001100

Преобразовали 48 в 32. С помощью узлов замены:

01000111 11010100 00011011

Перестановка бит в конце функции. Перестановка P:

11001111 11011010 00001000 после модификации. HPart XOR f(LPart,Key):

00001101 10101101 11010110

После обмена HPart:

11110001 10001000 11001010

После обмена LPart:

00001101 10101101 11010110

Итерация №16

Ключ из 56 бит после циклического сдвига, итерация 1:

0110000000111001000110001110

Ключ из 48 бит. Перестановка РС2:

10010011 01001010 10100111 00011110 01000000 , Началась функция модификации f:

00111110 00000110 00100100

Перевели 32 в 48. результат функции расширения Е:

00000001 11111100 00000000 11000001 00001000 . побитово суммируем по модулю 2:

10010010 10110110 10100111 11011111 01001000

Преобразовали 48 в 32. С помощью узлов замены:

00111110 00011000 00110110

Перестановка бит в конце функции. Перестановка P:

01000010 10010110 01110110 после модификации. HPart XOR f(LPart,Key):

00100001 00110100 00011010

Результат дешифрования блока. Конечная перестановка IP-1:

01101001 01101110 01100001 01100101 01110110 00000000 00000000

Результат блока бит до перевертывания(исправление недочета BitArray)... Блок № 0:

01101001 01101110 01100001 01100101 01110110 00000000 00000000

Результат блока бит после перевертывания...:

10010110 01110110 10000110 10100110 01101110 00000000 00000000

После дешифрования получили сообщение: Pinaev


3. Режим DES-CBC

 

.1 Общая схема шифрования


В этом режиме исходный набор байт M также, как и в режиме ECB, разбивается на 64-битовые блоки: M = M(1)M(2)...M(n). Первый блок M(1) складывается по модулю 2 с 64-битовым начальным вектором IV, который меняется ежедневно и держится в секрете. Полученная сумма затем шифруется с использованием ключа DES, известного и отправителю, и получателю информации. Полученный 64-битовый блок шифртекста C(1) складывается по модулю 2 со вторым блоком исходного текста, результат шифруется и получается второй 64-битовый блок шифртекста C(2) и т.д. Процедура повторяется до тех пор, пока не будут обработаны все блоки исходного текста (рисунок 5).

Рисунок 5. Общая схема шифрования и дешифрования

Плюс данного режима состоит в том, что он не позволяет накапливаться ошибкам при передаче. Блок M(i) является функцией только C(i-1) и C(i). Поэтому ошибка при передаче приведет к потере только двух блоков исходного текста.


3.2 Пример шифрования и расшифрования


Исходный текст: Pinaev

Ключ: Pavelll

Начальный вектор: 11111111

сходный блок бит... Блок № 0:

10010110 01110110 10000110 10100110 01101110 00000000 00000000

Перевернутые биты в блоке...:

01101001 01101110 01100001 01100101 01110110 00000000 00000000

Ключ из 56 бит:

__0011000__0101110__1100110__0101011__0110001__1011000__1101100__

Ключ из 64 бита, после добавления бит четности:

00110000 01011100 11001100 01010110 01100011 10110001 11011000

**********************ШИФРОВАНИЕ**********************

Исходное сообщение:

01101001 01101110 01100001 01100101 01110110 00000000 00000000

Начальный вектор:

00110001 00110001 00110001 00110001 00110001 00110001 00110001

Исходное сообщение XOR начальный вектор:

01011000 01011111 01010000 01010100 01000111 00110001 00110001

Начальная перестановка IP:

11011110 00110100 11100101 00000000 11000001 00000110 00100100 :

11011110 00110100 11100101 :

11000001 00000110 00100100

Ключ 64 бита. С битами четности:

00110000 01011100 11001100 01010110 01100011 10110001 11011000

ключ (56). Перестановка РС1:

10111101 01100010 11010011 00000001 11001000 11000111

ключ (28C (Left)):

1000 1011 1101 0110 0010 1101

ключ (28D (Right)):

0000 0001 1100 1000 1100 0111

Итерация №1

Ключ из 56 бит после циклического сдвига, итерация 1:

0110000000111001000110001110

Ключ из 48 бит. Перестановка РС2:

10010011 01001010 10100111 00011110 01000000 , Началась функция модификации f:

11000001 00000110 00100100

Перевели 32 в 48. результат функции расширения Е:

00010110 00000010 10000000 11000001 00001000 . побитово суммируем по модулю 2:

10000101 01001000 00100111 11011111 01001000

Преобразовали 48 в 32. С помощью узлов замены:

01010000 01001000 00110110

Перестановка бит в конце функции. Перестановка P:

00001111 10000110 00110010 после модификации. HPart XOR f(LPart,Key):

11010001 10110010 11010111

После обмена HPart:

11000001 00000110 00100100

После обмена LPart:

11010001 10110010 11010111

Итерация №16

Ключ из 56 бит после циклического сдвига, итерация 16:

0011000000011100100011000111

Ключ из 48 бит. Перестановка РС2:

00001110 10100011 10100101 01000101 00011001 , Началась функция модификации f:

11000111 10111111 11111000

Перевели 32 в 48. результат функции расширения Е:

01111110 00001111 11011111 11111111 11110000 . побитово суммируем по модулю 2:

01110000 10101100 01111010 10111010 11101001

Преобразовали 48 в 32. С помощью узлов замены:

00000111 10010101 01000100

Перестановка бит в конце функции. Перестановка P:

11011000 00110000 00111000 после модификации. HPart XOR f(LPart,Key):

00111111 00111001 11000111

Результат шифрования блока. Конечная перестановка IP-1:

11111001 01111001 01011110 11011110 11011110 11100011 01101011

Результат блока бит до перевертывания(исправление недочета BitArray)... Блок № 0:

11111001 01111001 01011110 11011110 11011110 11100011 01101011

Результат блока бит после перевертывания...:

10011111 10011110 01111010 01111011 01111011 11000111 11010110

Исходное зашифрованное сообщение:

Ключ: Pavelll

Начальный вектор: 11111111

Исходный блок бит... Блок № 0:

10011111 10011110 01111010 01111011 01111011 11000111 11010110

Перевернутые биты в блоке...:

11111001 01111001 01011110 11011110 11011110 11100011 01101011

Ключ из 56 бит:

__0011000__0101110__1100110__0101011__0110001__1011000__1101100__

Ключ из 64 бита, после добавления бит четности:

00110000 01011100 11001100 01010110 01100011 10110001 11011000

**********************ДеШИФРОВАНИЕ**********************

Начальная перестановка IP:

00111111 00111001 11000111 01110011 11000111 10111111 11111000 :

00111111 00111001 11000111 :

11000111 10111111 11111000

Ключ 64 бита. С битами четности:

00110000 01011100 11001100 01010110 01100011 10110001 11011000

ключ (56). Перестановка РС1:

10111101 01100010 11010011 00000001 11001000 11000111

ключ (28C (Left)):

1000 1011 1101 0110 0010 1101

ключ (28D (Right)):

0000 0001 1100 1000 1100 0111

Итерация №1

Ключ из 56 бит после циклического сдвига, итерация 16:

0011000000011100100011000111

Ключ из 48 бит. Перестановка РС2:

00001110 10100011 10100101 01000101 00011001 , Началась функция модификации f:

11000111 10111111 11111000

Перевели 32 в 48. результат функции расширения Е:

01111110 00001111 11011111 11111111 11110000 . побитово суммируем по модулю 2:

01110000 10101100 01111010 10111010 11101001

Преобразовали 48 в 32. С помощью узлов замены:

00000111 10010101 01000100

Перестановка бит в конце функции. Перестановка P:

11011000 00110000 00111000 после модификации. HPart XOR f(LPart,Key):

11100111 00001001 11111111

После обмена HPart:

11000111 10111111 11111000

После обмена LPart:

11100111 00001001 11111111

Итерация №16

Ключ из 56 бит после циклического сдвига, итерация 1:

0110000000111001000110001110

Ключ из 48 бит. Перестановка РС2:

10010011 01001010 10100111 00011110 01000000 , Началась функция модификации f:

11000001 00000110 00100100

Перевели 32 в 48. результат функции расширения Е:

00010110 00000010 10000000 11000001 00001000 . побитово суммируем по модулю 2:

10000101 01001000 00100111 11011111 01001000

Преобразовали 48 в 32. С помощью узлов замены:

01010000 01001000 00110110

Перестановка бит в конце функции. Перестановка P:

00001111 10000110 00110010 после модификации. HPart XOR f(LPart,Key):

11011110 00110100 11100101

Результат дешифрования блока. Конечная перестановка IP-1:

Результат дешифрования XOR начальный вектор:

01101001 01101110 01100001 01100101 01110110 00000000 00000000

Результат блока бит до перевертывания(исправление недочета BitArray)... Блок № 0:

01101001 01101110 01100001 01100101 01110110 00000000 00000000

Результат блока бит после перевертывания...:

10010110 01110110 10000110 10100110 01101110 00000000 00000000

После дешифрования получили сообщение: Pinaev

4. Режим тройной DES

DES (3DES) - симметричный блочный шифр, созданный Уитфилдом Диффи, Мартином Хеллманом и Уолтом Тачманном в 1978 году на основе алгоритма DES, с целью устранения главного недостатка последнего - малой длины ключа (56 бит), который может быть взломан методом полного перебора ключа. Скорость работы 3DES в 3 раза ниже, чем у DES, но криптостойкость намного выше - время, требуемое для криптоанализа 3DES, может быть в миллиард раз больше, чем время, нужное для вскрытия DES. 3DES используется чаще, чем DES, который легко ломается при помощи сегодняшних технологий (в 1998 году организация Electronic Frontier Foundation, используя специальный компьютер DES Cracker, вскрыла DES за 3 дня). 3DES является простым способом устранения недостатков DES. Алгоритм 3DES построен на основе DES, поэтому для его реализации возможно использовать программы, созданные для DES.

DES с различными ключами имеет длину ключа равную 168 бит, но из-за атак «встреча посередине» эффективная криптостойкость составляет только 112 бит. В варианте DES-EDE, в котором k1=k3, эффективный ключ имеет длину 80 бит.

Для успешной атаки на 3DES потребуется около  бит известного открытого текста, шагов, циклов DES-шифрования и  бит памяти.

4.1 Общие схемы шифрования


Схема алгоритма (рисунок 6) 3DES имеет такой вид:



где  - ключи для каждого DES-шага, M - входные данные, которые нужно шифровать. Это вариант известен как в ЕЕЕ, так как три DES операции являются шифрованием.

Рисунок 6. Схема алгоритма 3DES

Существует 3 типа алгоритма 3DES:

·        DES-EEE3: Шифруется три раза с тремя разными ключами (операции шифрование-шифрование-шифрование).

·        DES-EDE3: 3DES операции шифровка-расшифровка-шифровка с тремя разными ключами.

·        DES-EEE2 и DES-EDE2: Как и предыдущие, за исключением того, что на первом и третьем шаге используется одинаковый ключ.

Самый популярная разновидность 3DES - это DES-EDE3, для него алгоритм выглядит так:

Шифровка:

Расшифровка:

4.2. Пример шифрования и дешифрования методом Triple DES EDE3


Исходный текст: Pinaev

Ключ: 1234567

Второй ключ: 2345678

Третий ключ: 3456789

Исходный блок бит... Блок № 0:

10010110 01110110 10000110 10100110 01101110 00000000 00000000

Перевернутые биты в блоке...:

01101001 01101110 01100001 01100101 01110110 00000000 00000000

Ключ из 56 бит:

__1001100__1000110__0110011__0100001__1010100__1101100__0110111__

Ключ из 64 бита, после добавления бит четности:

10011001 10001101 01100110 01000010 10101001 11011000 01101111

**********************ШИФРОВАНИЕ**********************

Исходное сообщение:

01101001 01101110 01100001 01100101 01110110 00000000 00000000

Результат шифрования блока. Конечная перестановка IP-1:

10010001 11010011 11111011 10011110 00011011 11011101 00011111

Дешифрование со вторым ключом: 2345678

Ключ 64 бита. С битами четности:

00011000 11001100 10000111 01010011 10110001 11011101 01110001

ключ (56). Перестановка РС1:

11010100 10100001 11110001 10010100 11000100 01100011

**********************ДеШИФРОВАНИЕ**********************

Начальная перестановка IP:

10111001 10100000 01001100 00001111 01001000 11001011 00011011

Результат дешифрования блока. Конечная перестановка IP-1:

11011011 00000001 11011110 00110011 10101011 00011000 11001001

Шифрование третьим ключом: 3456789

Ключ 64 бита. С битами четности:

10011010 00001100 10100110 01100011 10111000 11100001 01110010

ключ (56). Перестановка РС1:

11010000 11111001 10101001 10110000 11000010 01100011 011011

**********************ШИФРОВАНИЕ**********************

Исходное сообщение:

11011011 00000001 11011110 00110011 10101011 00011000 11001001

Начальная перестановка IP:

01011011 00001000 10110110 10101011 00110000 11101010 00111011

Результат шифрования блока. Конечная перестановка IP-1:

11110100 11011000 00001101 01100110 00101111 00110111 01100101

Зашифрованное сообщение: ПфШf/7e

Исходное зашифрованное сообщение: ПфШf/7e

Ключ: 1234567

Второй ключ: 2345678

Третий ключ: 3456789

Исходный блок бит... Блок № 0:

00101111 00011011 10110000 01100110 11110100 11101100 10100110

Перевернутые биты в блоке...:

11110100 11011000 00001101 01100110 00101111 00110111 01100101

Ключ из 56 бит:

__1001101__0000110__1010011__0110001__1011100__1110000__0111001__

Ключ из 64 бита, после добавления бит четности:

10011010 00001100 10100110 01100011 10111000 11100001 01110010

**********************ДеШИФРОВАНИЕ**********************

Начальная перестановка IP:

01000110 11111011 11101001 00000111 11110010 00101101 01110001

Результат дешифрования блока. Конечная перестановка IP-1:

11011011 00000001 11011110 00110011 10101011 00011000 11001001

Шифрование вторым ключом: 2345678

Ключ 64 бита. С битами четности:

00011000 11001100 10000111 01010011 10110001 11011101 01110001

ключ (56). Перестановка РС1:

11010100 10100001 11110001 10010100 11000100 01100011

**********************ШИФРОВАНИЕ**********************

Исходное сообщение:

11011011 00000001 11011110 00110011 10101011 00011000 11001001

Результат шифрования блока. Конечная перестановка IP-1:

10010001 11010011 11111011 10011110 00011011 11011101 00011111

Дешифрование третьим ключом: 3456789

Ключ 64 бита. С битами четности:

10011001 10001101 01100110 01000010 10101001 11011000 01101111

ключ (56). Перестановка РС1:

11011000 10101001 01001001 10001000 11001110 01100011

**********************ДеШИФРОВАНИЕ**********************

Начальная перестановка IP:

11111111 11010000 11101111 01011110 00001000 11111000 10111101

Результат дешифрования блока. Конечная перестановка IP-1:

01101001 01101110 01100001 01100101 01110110 00000000 00000000

После дешифрования получили сообщение: Pinaev

5. Руководство пользователя программы

 

.1 Общие сведения


Разработчик - Пинаев Павел Сергеевич, студент группы 23К.

Дата создания - июнь 2013 года.

Язык разработки - С#.

Компоненты пакета - файл: DES.exe.

 

.2 Назначение программы


Программа предназначена для шифрования и дешифрования текстовых сообщений с использованием алгоритма шифрования DES. Возможно шифрование шестью разновидностями алгоритма DES: DES ECB, DES CBC, Triple DES EEE3, Triple DES EEE2, Triple DES EDE3, Triple DES EDE2.

 

.3 Используемые технические средства


Операционная система - Windows XP, Vista, 7, 8

Свободное место на жестком диске - не менее 50 Кб

Объем оперативной памяти - 128 Мб и более

Процессор Intel Core i3 и выше

Видеокарта 512 Мб

 

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


Входными данными программы являются шифруемое и дешифруемое сообщение, которые задаются пользователем при работе с программой.

Выходные данные - зашифрованное и расшифрованное текстовое сообщение.

5.5 Ввод в действие программного средства


Данный программный продукт не требует установки на ПК. Для запуска программы необходимо два раза щелкнуть левой кнопкой мыши по исполняемому файлу DES.exe.

После запуска программы откроется окно программы (рисунок 7).

Рисунок 7. Главное окно программы

5.5.1 Интерфейс

На главном окне расположено чекбоксы для выбора типа шифрования, а также текстовые поля ввода исходного сообщения, ключей, начального вектора. В соответсвующих полях можно увидеть результаты (де)шифрования, которые будут получены если будут нажаты соответсвующие кнопки. Присутствует окно отображения процесса (де)шифрования.

5.5.2 Использование программного средства

Программа реализует следующие функции:

·        Шифрование и дешифрование текста методом DES ECB (рисунок 8);

·        Шифрование и дешифрование текста методом DES CBC (рисунок 9);

·        Шифрование и дешифрование текста методом Triple DES EEE3 (рисунок 10);

·        Шифрование и дешифрование текста методом Triple DES EDE3 (рисунок 11);

·        Шифрование и дешифрование текста методом Triple DES EEE2 (рисунок 12);

·        Шифрование и дешифрование текста методом Triple DES EDE2 (рисунок 13);

Рисунок 8. Шифрование и дешифрование текста методом DES ECB

Рисунок 9. Шифрование и дешифрование текста методом DES CBC


Рисунок 10. Шифрование и дешифрование текста методом Triple DES EEE3

Рисунок 11. Шифрование и дешифрование текста методом Triple DES EDE3

Рисунок 12. Шифрование и дешифрование текста методом Triple DES EEE2


Рисунок 13. Шифрование и дешифрование текста методом Triple DES EDE2

криптографический программный шифрование текст

6. Код программы

System;System.Collections;System.Collections.Generic;System.ComponentModel;System.Data;System.Drawing;System.Linq;System.Text;System.Windows.Forms;DES

{partial class Form1: Form

{Form1()

{();

}string bufff;string bufff1;string IshSoobshen;byte[] T;bool Shifr;BitArray btIsh = new BitArray(64);BitArray[] btTransp;BitArray bt1;BitArray bt2;BitArray btKluch1;BitArray btKluch2;BitArray[] KLUCHI;BitArray[] KLUCHIPREDVORITELNII;BitArray kluchC0;BitArray kluchD0;BitArray kluchC1;BitArray kluchD1;BitArray[] L0;BitArray[] H0;BitArray[] L1;BitArray[] H1;BitArray[] LPart;BitArray[] HPart;BitArray[] HHH;BitArray[] b2b3b4b5;BitArray[] b1b6;BitArray[] TTT;BitArray HShtrih;BitArray Funk;BitArray[] ItogPredv;BitArray[] Itog;BitArray[] CBCItog;int[] NStr;int[] NStolb;int[,] UzelZam;int buf;int buf2;BitArray buf3;bool steck;bool kluch;bool vector;BitArray Vekt;bool EEE2;bool EEE3;bool EDE2;bool EDE3;int[] IP = {58,50,42,34,26,18,10,2,

,52,44,36,28,20,12,4,

,54,46,38,30,22,14,6,

,56,48,40,32,24,16,8,

,49,41,33,25,17,9,1,

,51,43,35,27,19,11,3,

,53,45,37,29,21,13,5,

,55,47,39,31,23,15,7};int[] IP1 = {40,8,48,16,56,24,64,32,

,7,47,15,55,23,63,31,

,6,46,14,54,22,62,30,

,5,45,13,53,21,61,29,

,4,44,12,52,20,60,28,

,3,43,11,51,19,59,27,

,2,42,10,50,18,58,26,

,1,41,9,49,17,57,25};int[] E = {32,1,2,3,4,5,

,5,6,7,8,9,

,9,10,11,12,13,

,13,14,15,16,17,

,17,18,19,20,21,

,21,22,23,24,25,

,25,26,27,28,29,

,29,30,31,32,1};int[] P = {16,7,20,21,29,12,28,17,

,15,23,26,5,18,31,10,

,8,24,14,32,27,3,9,

,13,30,6,22,11,4,25};int[] S10 = { 14, 4, 13, 1, 2, 15, 11, 8, 3, 10, 6, 12, 5, 9, 0, 7 };int[] S11 = { 0, 15, 7, 4, 14, 2, 13, 1, 10, 6, 12, 11, 9, 5, 3, 8 };int[] S12 = { 4, 1, 14, 8, 13, 6, 2, 11, 15, 12, 9, 7, 3, 10, 5, 0 };int[] S13 = { 15, 12, 8, 2, 4, 9, 1, 7, 5, 11, 3, 14, 10, 0, 6, 13 };int[] S20 = { 15, 1, 8, 14, 6, 11, 3, 4, 9, 7, 2, 13, 12, 0, 5, 10 };int[] S21 = { 3, 13, 4, 7, 15, 2, 8, 14, 12, 0, 1, 10, 6, 9, 11, 5 };int[] S22 = { 0, 14, 7, 11, 10, 4, 13, 1, 5, 8, 12, 6, 9, 3, 2, 15 };int[] S23 = { 13, 8, 10, 1, 3, 15, 4, 2, 11, 6, 7, 12, 0, 5, 14, 9 };int[] S30 = { 10, 0, 9, 14, 6, 3, 15, 5, 1, 13, 12, 7, 11, 4, 2, 8 };int[] S31 = { 13, 7, 0, 9, 3, 4, 6, 10, 2, 8, 5, 14, 12, 11, 15, 1 };int[] S32 = { 13, 6, 4, 9, 8, 15, 3, 0, 11, 1, 2, 12, 5, 10, 14, 7 };int[] S33 = { 1, 10, 13, 0, 6, 9, 8, 7, 4, 15, 14, 3, 11, 5, 2, 12 };int[] S40 = { 7, 13, 14, 3, 0, 6, 9, 10, 1, 2, 8, 5, 11, 12, 4, 15 };int[] S41 = { 13, 8, 11, 5, 6, 15, 0, 3, 4, 7, 2, 12, 1, 10, 14, 9 };int[] S42 = { 10, 6, 9, 0, 12, 11, 7, 13, 15, 1, 3, 14, 5, 2, 8, 4 };int[] S43 = { 3, 15, 0, 6, 10, 1, 13, 8, 9, 4, 5, 11, 12, 7, 2, 14 };int[] S50 = { 2, 12, 4, 1, 7, 10, 11, 6, 8, 5, 3, 15, 13, 0, 14, 9 };int[] S51 = { 14, 11, 2, 12, 4, 7, 13, 1, 5, 0, 15, 10, 3, 9, 8, 6 };int[] S52 = { 4, 2, 1, 11, 10, 13, 7, 8, 15, 9, 12, 5, 6, 3, 0, 14 };int[] S53 = { 11, 8, 12, 7, 1, 14, 2, 13, 6, 15, 0, 9, 10, 4, 5, 3 };int[] S60 = { 12, 1, 10, 15, 9, 2, 6, 8, 0, 13, 3, 4, 14, 7, 5, 11 };int[] S61 = { 10, 15, 4, 2, 7, 12, 9, 5, 6, 1, 13, 14, 0, 11, 3, 8 };int[] S62 = { 9, 14, 15, 5, 2, 8, 12, 3, 7, 0, 4, 10, 1, 13, 11, 6 };int[] S63 = { 4, 3, 2, 12, 9, 5, 15, 10, 11, 14, 1, 7, 6, 0, 8, 13 };int[] S70 = { 4, 11, 2, 14, 15, 0, 8, 13, 3, 12, 9, 7, 5, 10, 6, 1 };int[] S71 = { 13, 0, 11, 7, 4, 9, 1, 10, 14, 3, 5, 12, 2, 15, 8, 6 };int[] S72 = { 1, 4, 11, 13, 12, 3, 7, 14, 10, 15, 6, 8, 0, 5, 9, 2 };int[] S73 = { 6, 11, 13, 8, 1, 4, 10, 7, 9, 5, 0, 15, 14, 2, 3, 12 };int[] S80 = { 13, 2, 8, 4, 6, 15, 11, 1, 10, 9, 3, 14, 5, 0, 12, 7 };int[] S81 = { 1, 15, 13, 8, 10, 3, 7, 4, 12, 5, 6, 11, 0, 14, 9, 2 };int[] S82 = { 7, 11, 4, 1, 9, 12, 14, 2, 0, 6, 10, 13, 15, 3, 5, 8 };int[] S83 = { 2, 1, 14, 7, 4, 10, 8, 13, 15, 12, 9, 0, 3, 5, 6, 11 };int[] PC1 = { 57,49,41,33,25,17,9,

,58,50,42,34,26,18,

,2,59,51,43,35,27,

,11,3,60,52,44,36,

,55,47,39,31,23,15,

,62,54,46,38,30,22,

,6,61,53,45,37,29,

,13,5,28,20,12,4};int[] PC2 = { 14,17,11,24,1,5,

,28,15,6,21,10,

,19,12,4,26,8,

,7,27,20,13,2,

,52,31,37,47,55,

,40,51,45,33,48,

,49,39,56,34,53,

,42,50,36,29,32};int[] SDVIGG = { 1,1,2,2,2,2,2,2,1,2,2,2,2,2,2,1};

//вектор в битыvoid VectorToByte()

{= 0;= false;(IshSoobshen.Length == 8)

{

//переводим в байты= true;[] T = Encoding.Default.GetBytes(IshSoobshen);

//в биты= new BitArray(T);

////переворачиваем(int g = 0; g < Vekt.Length / 8; g++)

{= 0;(int i = 0; i < 4; i++)

{= Vekt[i + (g * 8)];[i + (g * 8)] = Vekt[i + (g * 8) + 7 - buf];[i + (g * 8) + 7 - buf] = steck;+= 2;

}

}

}

{.Show("Неправильный вектор");= false;

}

}

//ключ в битыvoid KeyToByte()

{= 0;= false;(IshSoobshen.Length == 7)

{

//переводим в байты= true;[] T = Encoding.Default.GetBytes(IshSoobshen);

//в биты= new BitArray(T);

////переворачиваем(int g = 0; g < btKluch1.Length / 8; g++)

{= 0;(int i = 0; i < 4; i++)

{= btKluch1[i + (g * 8)];[i + (g * 8)] = btKluch1[i + (g * 8) + 7 - buf];[i + (g * 8) + 7 - buf] = steck;+= 2;

}

}

}

{.Show("Неправильный ключ");= false;

}

}

//сообщение в битыvoid MessToByte()

{= 0;

//переводим в байты[] T = Encoding.Default.GetBytes(IshSoobshen);

//в биты= new BitArray(T);(bt2.Length % 64!= 0)

{//проверяем кратность 64 бит= new BitArray(bt2.Length + (64 - bt2.Length % 64));(int y = 0; y < bt2.Length; y++)

{[y] = bt2[y];

}

}

{= new BitArray(bt2.Length);(int y = 0; y < bt2.Length; y++)

{[y] = bt2[y];

}

}

//меняем местами биты в блоках(int g = 0; g < bt1.Length / 8; g++)

{= 0;(int i = 0; i < 4; i++)

{= bt1[i + (g * 8)];[i + (g * 8)] = bt1[i + (g * 8) + 7 - buf];[i + (g * 8) + 7 - buf] = steck;+= 2;

}

}

}

//делим сообщение на блоки по 8 битvoid CutForBlock()

{

//кол-во блоков= bt1.Length / 64;

//делим на перестановленные блоки= new BitArray[buf];(int i = 0; i < buf; i++)

{[i] = new BitArray(64);

}= 0;(int g = 0; g < buf; g++)

{(int h = g * 64; h < (g + 1) * 64; h++)

{(g == 0)

{[buf2][h] = bt1[IP[h] - 1];

}

{[buf2][h - g * 64] = bt1[IP[h - g * 64] - 1 + g * 64];

}

}++;

}

}

//дополняем ключ битом четностиvoid KeyTo64()

{

// бит четности= 0;= 0;= new BitArray(8);(int y = 0; y < 8; y++)

{(int u = 0; u < 7; u++)

{(btKluch1[y * 7 + u] == true)

{++;

}

}((buf % 2 == 0) || (buf == 0))

{[buf2] = false;

}{ buf3[buf2] = true; }= 0;++;

}

//заносим бит четности в ключ= 0;= 0;= new BitArray(64);(int k = 0; k < 64; k++)

{((k == 7) || (k == 15) || (k == 23) || (k == 31) || (k == 39) || (k == 47) || (k == 55) || (k == 63))

{[k] = buf3[buf2];++;

}

{[k] = btKluch1[buf];++;

}

}

}

//разбиваем сообщение на 2 частиvoid OneToTwo()

{= new BitArray[17];= new BitArray[17];= new BitArray[17];= new BitArray[17];= new BitArray[8];= new BitArray[8];b6 = new BitArray[8];= new BitArray[btTransp.Length];= new BitArray[btTransp.Length];b3b4b5 = new BitArray[8];= new int[8];= new int[8];= new int[16, 8];= new BitArray(32);= new BitArray(32);(int gh = 0; gh < btTransp.Length; gh++)

{[gh] = new BitArray(64);[gh] = new BitArray(64);

}(int qwe = 0; qwe < 8; qwe++)

{[qwe] = new BitArray(4);[qwe] = new BitArray(6);b6[qwe] = new BitArray(2);b3b4b5[qwe] = new BitArray(4);

}= new BitArray[btTransp.Length];= new BitArray[btTransp.Length];(int i = 0; i < 17; i++)

{[i] = new BitArray(32);[i] = new BitArray(32);[i] = new BitArray(48);[i] = new BitArray(48);

}(int e = 0; e < btTransp.Length; e++)

{[e] = new BitArray(32);[e] = new BitArray(32);

}(int s = 0; s < btTransp.Length; s++)

{(int d = 0; d < 32; d++)

{[s][d] = btTransp[s][d];[s][d] = btTransp[s][d + 32];

}

}

}

//все методы print выводят шаги на экранvoid Print1()

{= 0;= "";(int k = 0; k < bt1.Length / 64; k++)

{.Items.Add((k + 1) + "й изначальный блок бит:");(int y = 0; y < 64; y++)

{((y == 7) || (y == 15) || (y == 23) || (y == 31) || (y == 39) || (y == 47) || (y == 55) || (y == 63))

{+= (bt1[64 * k + y] ? 1: 0).ToString();+= " ";

}

{+= (bt1[64 * k + y] ? 1: 0).ToString();

}

}.Items.Add(bufff);= "";

}

}void Print2()

{= "";(int k = 0; k < btTransp.Length; k++)

{.Items.Add((k + 1) + "й переставленный блок бит:");(int y = 0; y < 64; y++)

{((y == 7) || (y == 15) || (y == 23) || (y == 31) || (y == 39) || (y == 47) || (y == 55) || (y == 63))

{+= (btTransp[k][y] ? 1: 0).ToString();+= " ";

}

{+= (btTransp[k][y] ? 1: 0).ToString();

}

}.Items.Add(bufff);= "";

}

}void Print3()

{= "";= 0;.Items.Add("Ключ из 56 бит:");(int y = 0; y < 64; y++)

{((y == 7) || (y == 15) || (y == 23) || (y == 31) || (y == 39) || (y == 47) || (y == 55) || (y == 63))

{+= "* ";++;

}

{+= (btKluch1[y - buf] ? 1: 0).ToString();

}

}.Items.Add(bufff);= "";

}void Print4()

{= "";.Items.Add("Ключ из 64 бит:");(int y = 0; y < 64; y++)

{((y == 7) || (y == 15) || (y == 23) || (y == 31) || (y == 39) || (y == 47) || (y == 55) || (y == 63))

{+= (btKluch2[y] ? 1: 0).ToString();+= " ";

}

{+= (btKluch2[y] ? 1: 0).ToString();

}

}.Items.Add(bufff);= "";

}

//метод ECBvoid ECB()

{

//переводим ключ в биты= textBox4.Text;();(Shifr == true)

{= textBox2.Text;

}

{= textBox3.Text;

}((IshSoobshen!= "")&&(kluch==true))

{

//переводим сообщение в биты();= bt1.Length / 64;

//выводим на экран.Items.Add("---------------------------ПОДГОТОВКА---------------------------");.Items.Add("Сообщение состоит из х" + buf + " 64 битных блоков");();

//делим на блоки();

//выводим на экран();

////вывод на экран ключ();

//дополняем ключ до 64 бит();

//выводим ключ 64 бит на экран();

//метод для ключевых элементов();

//разбиваем сообщение на половинки();

//функция шифрования();

}

{(kluch == true)

{.Show("Исходное сообщение отсутствует!");

}

}

}

//алгоритм DES-CBCvoid CBC()

{

//переводим ключ в биты= textBox4.Text;();

//переводим вектор в биты= textBox6.Text;();(Shifr == true)

{= textBox2.Text;

}

{= textBox3.Text;

}((IshSoobshen!= "") && (kluch == true)&&(vector==true))

{

//переводим сообщение в биты();= bt1.Length / 64;

//выводим на экран.Items.Add("---------------------------ПОДГОТОВКА---------------------------");.Items.Add("Сообщение состоит из х" + buf + " 64 битных блоков");();

//делим на блоки();

//выводим на экран();

////вывод на экран ключ();

//выводим ключ 64 бит на экран();

//метод для ключевых элементов();

//XOR с вектором(Shifr == true)

{[0].Xor(Vekt);

}

//разбиваем сообщение на половинки();

//функция шифрования();

}

{((kluch == true)&&(vector==true))

{.Show("Исходное сообщение отсутствует!");

}

}

}

//EEEvoid EEE()

{(((EEE3==true)&&(textBox4.Text.Length == 7) && (textBox7.Text.Length == 7) && (textBox8.Text.Length == 7))||((EEE2==true)&&(textBox4.Text.Length == 7) && (textBox7.Text.Length == 7)))

{(Shifr == true)

{

//переводим ключ в биты= textBox4.Text;();= textBox2.Text;((IshSoobshen!= "") && (kluch == true))

{

//переводим сообщение в биты();= bt1.Length / 64;

//выводим на экран.Items.Add("---------------------------ПОДГОТОВКА---------------------------");.Items.Add("Сообщение состоит из х" + buf + " 64 битных блоков");();

//делим на блоки();

//выводим на экран();

////вывод на экран ключ();

//дополняем ключ до 64 бит();

//выводим ключ 64 бит на экран();

//метод для ключевых элементов();

//разбиваем сообщение на половинки();

//функция шифрования();= textBox7.Text;();= textBox3.Text;.Clear();

//переводим сообщение в биты();

//выводим на экран.Items.Add(" ");();

//делим на блоки();

//выводим на экран();

////вывод на экран ключ();

//дополняем ключ до 64 бит();

//выводим ключ 64 бит на экран();

//метод для ключевых элементов();

//разбиваем сообщение на половинки();

//функция шифрования();(EEE3 == true)

{= textBox8.Text;

}(EEE2 == true)

{= textBox4.Text;

}();= textBox3.Text;.Clear();

//переводим сообщение в биты();

//выводим на экран.Items.Add(" ");();

//делим на блоки();

//выводим на экран();

////вывод на экран ключ();

//дополняем ключ до 64 бит();

//выводим ключ 64 бит на экран();

//метод для ключевых элементов();

//разбиваем сообщение на половинки();

//функция шифрования();

}

{(kluch == true)

{.Show("Исходное сообщение отсутствует!");

}

}

}

{

//переводим ключ в биты(EEE3 == true)

{= textBox8.Text;

}(EEE2 == true)

{= textBox4.Text;

}();= textBox3.Text;((IshSoobshen!= "") && (kluch == true))

{

//переводим сообщение в биты();= bt1.Length / 64;

//выводим на экран.Items.Add("---------------------------ПОДГОТОВКА---------------------------");.Items.Add("Сообщение состоит из х" + buf + " 64 битных блоков");();

//делим на блоки();

//выводим на экран();

////вывод на экран ключ();

//дополняем ключ до 64 бит();

//выводим ключ 64 бит на экран();

//метод для ключевых элементов();

//разбиваем сообщение на половинки();

//функция шифрования();= textBox7.Text;();= textBox5.Text;.Clear();

//переводим сообщение в биты();

//выводим на экран.Items.Add(" ");();

//делим на блоки();

//выводим на экран();

////вывод на экран ключ();

//дополняем ключ до 64 бит();

//выводим ключ 64 бит на экран();

//метод для ключевых элементов();

//разбиваем сообщение на половинки();

//функция шифрования();= textBox4.Text;();= textBox5.Text;.Clear();

//переводим сообщение в биты();

//выводим на экран.Items.Add(" ");();

//делим на блоки();

//выводим на экран();

////вывод на экран ключ();

//дополняем ключ до 64 бит();

//выводим ключ 64 бит на экран();

//метод для ключевых элементов();

//разбиваем сообщение на половинки();

//функция шифрования();

}

{(kluch == true)

{.Show("Исходное сообщение отсутствует!");

}

}

}

}

{.Show("Проверьте ключи. Один из них не подходит.");

}

}

//EDEvoid EDE()

{(((EDE3 == true) && (textBox4.Text.Length == 7) && (textBox7.Text.Length == 7) && (textBox8.Text.Length == 7)) || ((EDE2 == true) && (textBox4.Text.Length == 7) && (textBox7.Text.Length == 7)))

{(Shifr == true)

{

//переводим ключ в биты= textBox4.Text;();= textBox2.Text;((IshSoobshen!= "") && (kluch == true))

{

//переводим сообщение в биты();= bt1.Length / 64;

//выводим на экран.Items.Add("---------------------------ПОДГОТОВКА---------------------------");.Items.Add("Сообщение состоит из х" + buf + " 64 битных блоков");();

//делим на блоки();

//выводим на экран();

////вывод на экран ключ();

//дополняем ключ до 64 бит();

//выводим ключ 64 бит на экран();

//метод для ключевых элементов();

//разбиваем сообщение на половинки();

//функция шифрования();= false;= textBox7.Text;();= textBox3.Text;.Clear();

//переводим сообщение в биты();

//выводим на экран.Items.Add(" ");();

//делим на блоки();

//выводим на экран();

////вывод на экран ключ();

//дополняем ключ до 64 бит();

//выводим ключ 64 бит на экран();

//метод для ключевых элементов();

//разбиваем сообщение на половинки();

//функция шифрования();= true;(EDE3 == true)

{= textBox8.Text;

}(EDE2 == true)

{= textBox4.Text;

}();= textBox5.Text;.Clear();

//переводим сообщение в биты();

//выводим на экран.Items.Add(" ");();

//делим на блоки();

//выводим на экран();

////вывод на экран ключ();

//дополняем ключ до 64 бит();

//выводим ключ 64 бит на экран();

//метод для ключевых элементов();

//разбиваем сообщение на половинки();

//функция шифрования();

}

{(kluch == true)

{.Show("Исходное сообщение отсутствует!");

}

}

}

{

//переводим ключ в биты(EDE3 == true)

{= textBox8.Text;

}(EDE2 == true)

{= textBox4.Text;

}();= textBox3.Text;= textBox3.Text;((IshSoobshen!= "") && (kluch == true))

{

//переводим сообщение в биты();= bt1.Length / 64;

//выводим на экран.Items.Add("---------------------------ПОДГОТОВКА---------------------------");.Items.Add("Сообщение состоит из х" + buf + " 64 битных блоков");();

//делим на блоки();

//выводим на экран();

////вывод на экран ключ();

//дополняем ключ до 64 бит();

//выводим ключ 64 бит на экран();

//метод для ключевых элементов();

//разбиваем сообщение на половинки();

//функция шифрования();= true;= textBox7.Text;();= textBox5.Text;.Clear();.Clear();

//переводим сообщение в биты();

//выводим на экран.Items.Add(" ");();

//делим на блоки();

//выводим на экран();

////вывод на экран ключ();

//дополняем ключ до 64 бит();

//выводим ключ 64 бит на экран();

//метод для ключевых элементов();

//разбиваем сообщение на половинки();

//функция шифрования();= false;= textBox4.Text;();= textBox3.Text;.Clear();.Text = bufff1;

//переводим сообщение в биты();

//выводим на экран.Items.Add(" ");();

//делим на блоки();

//выводим на экран();

////вывод на экран ключ();

//дополняем ключ до 64 бит();

//выводим ключ 64 бит на экран();

//метод для ключевых элементов();

//разбиваем сообщение на половинки();

//функция шифрования();

}

{(kluch == true)

{.Show("Исходное сообщение отсутствует!");

}

}

}

}

{.Show("Проверьте ключи. Один из них не подходит.");

}

}void button1_Click(object sender, EventArgs e)

{.Items.Clear();.Clear();.Clear();= true;= false;= false;= false;= false;= false;= false;(radioButton1.Checked == true)

{();

}(radioButton2.Checked == true)

{();

}(radioButton3.Checked == true)

{= true;();

}(radioButton4.Checked == true)

{= true;();

}(radioButton5.Checked == true)

{= true;();

}(radioButton6.Checked == true)

{= true;();

}

}void button2_Click(object sender, EventArgs e)

{.Items.Clear();.Clear();= false;= false;= false;= false;= false;= false;= false;(radioButton1.Checked == true)

{();

}(radioButton2.Checked == true)

{();

}(radioButton3.Checked == true)

{= true;();

}(radioButton4.Checked == true)

{= true;();

}(radioButton5.Checked == true)

{= true;();

}(radioButton6.Checked == true)

{= true;();

}

}

//функция шифрования/дешифрованияvoid FUNKCIY()

{.Items.Add(" ");(Shifr == true)

{.Items.Add("---------------------------ШИФРОВАНИЕ--------------------------- ");

}

{.Items.Add("---------------------------ДЕШИФРОВАНИЕ--------------------------- ");

}(int counttt = 0; counttt < btTransp.Length; counttt++)

{.Items.Add(" ");.Items.Add((counttt + 1) + "й блок: ");((counttt == 0) || (vector == false))

{[0] = HPart[counttt];[0] = LPart[counttt];

}

//для CBC

{(Shifr == true)

{(int s = 0; s < btTransp.Length; s++)

{(int d = 0; d < 32; d++)

{[s][d] = btTransp[s][d];[s][d] = btTransp[s][d + 32];

}

}[0] = HPart[counttt];[0] = LPart[counttt];

}

{[0] = HPart[counttt];[0] = LPart[counttt];

}

}(int i = 1; i < 17; i++)

{.Items.Add(" ");.Items.Add(i + "я итерация: ");

//в 48 бит(int cv=0; cv< 48; cv++)

{[i - 1][cv] = L0[i-1][E[cv] - 1];

}

//проверка.Items.Add("блок L" + (i - 1) + " в 48 бит: ");= "";(int bn = 0; bn < 48; bn++)

{((bn == 7) || (bn == 15) || (bn == 23) || (bn == 31) || (bn == 39) || (bn == 47))

{+= (L1[i - 1][bn] ? 1: 0).ToString();+= " ";

}

{+= (L1[i - 1][bn] ? 1: 0).ToString();

}

}.Items.Add(bufff);= "";.Items.Add("блок L" + (i - 1) + " в 48 бит: ");(int n = 0; n < 48; n++)

{((n == 7) || (n == 15) || (n == 23) || (n == 31) || (n == 39) || (n == 47))

{+= (KLUCHI[i - 1][n] ? 1: 0).ToString();+= " ";

}

{+= (KLUCHI[i - 1][n] ? 1: 0).ToString();

}

}.Items.Add(bufff);= "";

//XOR(Shifr == true)

{[i - 1].Xor(KLUCHI[i - 1]);

}

{[i - 1].Xor(KLUCHI[17-i - 1]);

}.Items.Add("Результат XOR L(" + (i - 1) + ") и " + i + "го ключевого элемента ");(int bn = 0; bn < 48; bn++)

{((bn == 7) || (bn == 15) || (bn == 23) || (bn == 31) || (bn == 39) || (bn == 47))

{+= (L1[i - 1][bn] ? 1: 0).ToString();+= " ";

}

{+= (L1[i - 1][bn] ? 1: 0).ToString();

}

}.Items.Add(bufff);= "";(int t = 0; t < 6; t++)

{[0][t] = L1[i - 1][t];[1][t] = L1[i - 1][t+6];[2][t] = L1[i - 1][t+12];[3][t] = L1[i - 1][t+18];[4][t] = L1[i - 1][t+24];[5][t] = L1[i - 1][t+30];[6][t] = L1[i - 1][t+36];[7][t] = L1[i - 1][t+42];

}

//выводим на экран(int t = 0; t < 8; t++)

{.Items.Add((t + 1) + "й " + "H элемент ");(int z = 0; z < 6; z++)

{+= (HHH[t][z] ? 1: 0).ToString();

}.Items.Add(bufff);= "";

}

//задаем b1b6 и b2b3b4b5(int t = 0; t < 8; t++)

{b6[t][0] = HHH[t][0];b6[t][1] = HHH[t][5];b3b4b5[t][0] = HHH[t][1];b3b4b5[t][1] = HHH[t][2];b3b4b5[t][2] = HHH[t][3];b3b4b5[t][3] = HHH[t][4];

}

//переводим в число(int t = 0; t < 8; t++)

{((b1b6[t][0] == false) && (b1b6[t][1] == false))

{[t] = 0;

}((b1b6[t][0] == false) && (b1b6[t][1] == true))

{[t] = 1;

}((b1b6[t][0] == true) && (b1b6[t][1] == false))

{[t] = 2;

}((b1b6[t][0] == true) && (b1b6[t][1] == true))

{[t] = 3;

}((b2b3b4b5[t][0] == false) && (b2b3b4b5[t][1] == false) && (b2b3b4b5[t][2] == false) && (b2b3b4b5[t][3] == false))

{[t] = 0;

}((b2b3b4b5[t][0] == false) && (b2b3b4b5[t][1] == false) && (b2b3b4b5[t][2] == false) && (b2b3b4b5[t][3] == true))

{[t] = 1;

}((b2b3b4b5[t][0] == false) && (b2b3b4b5[t][1] == false) && (b2b3b4b5[t][2] == true) && (b2b3b4b5[t][3] == false))

{[t] = 2;

}((b2b3b4b5[t][0] == false) && (b2b3b4b5[t][1] == false) && (b2b3b4b5[t][2] == true) && (b2b3b4b5[t][3] == true))

{[t] = 3;

}((b2b3b4b5[t][0] == false) && (b2b3b4b5[t][1] == true) && (b2b3b4b5[t][2] == false) && (b2b3b4b5[t][3] == false))

{[t] = 4;

}((b2b3b4b5[t][0] == false) && (b2b3b4b5[t][1] == true) && (b2b3b4b5[t][2] == false) && (b2b3b4b5[t][3] == true))

{[t] = 5;

}((b2b3b4b5[t][0] == false) && (b2b3b4b5[t][1] == true) && (b2b3b4b5[t][2] == true) && (b2b3b4b5[t][3] == false))

{[t] = 6;

}((b2b3b4b5[t][0] == false) && (b2b3b4b5[t][1] == true) && (b2b3b4b5[t][2] == true) && (b2b3b4b5[t][3] == true))

{[t] = 7;

}((b2b3b4b5[t][0] == true) && (b2b3b4b5[t][1] == false) && (b2b3b4b5[t][2] == false) && (b2b3b4b5[t][3] == false))

{[t] = 8;

}((b2b3b4b5[t][0] == true) && (b2b3b4b5[t][1] == false) && (b2b3b4b5[t][2] == false) && (b2b3b4b5[t][3] == true))

{[t] = 9;

}((b2b3b4b5[t][0] == true) && (b2b3b4b5[t][1] == false) && (b2b3b4b5[t][2] == true) && (b2b3b4b5[t][3] == false))

{[t] = 10;

}((b2b3b4b5[t][0] == true) && (b2b3b4b5[t][1] == false) && (b2b3b4b5[t][2] == true) && (b2b3b4b5[t][3] == true))

{[t] = 11;

}((b2b3b4b5[t][0] == true) && (b2b3b4b5[t][1] == true) && (b2b3b4b5[t][2] == false) && (b2b3b4b5[t][3] == false))

{[t] = 12;

}((b2b3b4b5[t][0] == true) && (b2b3b4b5[t][1] == true) && (b2b3b4b5[t][2] == false) && (b2b3b4b5[t][3] == true))

{[t] = 13;

}((b2b3b4b5[t][0] == true) && (b2b3b4b5[t][1] == true) && (b2b3b4b5[t][2] == true) && (b2b3b4b5[t][3] == false))

{[t] = 14;

}((b2b3b4b5[t][0] == true) && (b2b3b4b5[t][1] == true) && (b2b3b4b5[t][2] == true) && (b2b3b4b5[t][3] == true))

{[t] = 15;

}

}

//узнаем узел замены(int t = 0; t < 8; t++)

{(t == 0)

{(NStr[t] == 0)

{[i-1,t]=S10[NStolb[t]];

}(NStr[t] == 1)

{[i - 1, t] = S11[NStolb[t]];

}(NStr[t] == 2)

{[i - 1, t] = S12[NStolb[t]];

}(NStr[t] == 3)

{[i - 1, t] = S13[NStolb[t]];

}

}(t == 1)

{(NStr[t] == 0)

{[i - 1, t] = S20[NStolb[t]];

}(NStr[t] == 1)

{[i - 1, t] = S21[NStolb[t]];

}(NStr[t] == 2)

{[i - 1, t] = S22[NStolb[t]];

}(NStr[t] == 3)

{[i - 1, t] = S23[NStolb[t]];

}

}(t == 2)

{[i - 1, t] = S30[NStolb[t]];

}(NStr[t] == 1)

{[i - 1, t] = S31[NStolb[t]];

}(NStr[t] == 2)

{[i - 1, t] = S32[NStolb[t]];

}(NStr[t] == 3)

{[i - 1, t] = S33[NStolb[t]];

}

}(t == 3)

{(NStr[t] == 0)

{[i - 1, t] = S40[NStolb[t]];

}(NStr[t] == 1)

{[i - 1, t] = S41[NStolb[t]];

}(NStr[t] == 2)

{[i - 1, t] = S42[NStolb[t]];

}(NStr[t] == 3)

{[i - 1, t] = S43[NStolb[t]];

}

}(t == 4)

{(NStr[t] == 0)

{[i - 1, t] = S50[NStolb[t]];

}(NStr[t] == 1)

{[i - 1, t] = S51[NStolb[t]];

}(NStr[t] == 2)

{[i - 1, t] = S52[NStolb[t]];

}(NStr[t] == 3)

{[i - 1, t] = S53[NStolb[t]];

}

}(t == 5)

{(NStr[t] == 0)

{[i - 1, t] = S60[NStolb[t]];

}(NStr[t] == 1)

{[i - 1, t] = S61[NStolb[t]];

}(NStr[t] == 2)

{[i - 1, t] = S62[NStolb[t]];

}(NStr[t] == 3)

{[i - 1, t] = S63[NStolb[t]];

}

}(t == 6)

{(NStr[t] == 0)

{[i - 1, t] = S70[NStolb[t]];

}(NStr[t] == 1)

{[i - 1, t] = S71[NStolb[t]];

}(NStr[t] == 2)

{[i - 1, t] = S72[NStolb[t]];

}(NStr[t] == 3)

{[i - 1, t] = S73[NStolb[t]];

}

}(t == 7)

{(NStr[t] == 0)

{[i - 1, t] = S80[NStolb[t]];

}(NStr[t] == 1)

{[i - 1, t] = S81[NStolb[t]];

}(NStr[t] == 2)

{[i - 1, t] = S82[NStolb[t]];

}(NStr[t] == 3)

{[i - 1, t] = S83[NStolb[t]];

}

}

}

//переводим в биты(int t = 0; t < 8; t++)

{(UzelZam[i - 1, t] == 0)

{[t][0] = false;[t][1] = false;[t][2] = false;[t][3] = false;

}(UzelZam[i - 1, t] == 1)

{[t][0] = false;[t][1] = false;[t][2] = false;[t][3] = true;

}(UzelZam[i - 1, t] == 2)

{[t][0] = false;[t][1] = false;[t][2] = true;[t][3] = false;

}(UzelZam[i - 1, t] == 3)

{[t][0] = false;[t][1] = false;[t][2] = true;[t][3] = true;

}(UzelZam[i - 1, t] == 4)

{[t][0] = false;[t][1] = true;[t][2] = false;[t][3] = false;

}(UzelZam[i - 1, t] == 5)

{[t][0] = false;[t][1] = true;[t][2] = false;[t][3] = true;

}(UzelZam[i - 1, t] == 6)

{[t][0] = false;[t][1] = true;[t][2] = true;[t][3] = false;

}(UzelZam[i - 1, t] == 7)

{[t][0] = false;[t][1] = true;[t][2] = true;[t][3] = true;

}(UzelZam[i - 1, t] == 8)

{[t][0] = true;[t][1] = false;[t][2] = false;[t][3] = false;

}(UzelZam[i - 1, t] == 9)

{[t][0] = true;[t][1] = false;[t][2] = false;[t][3] = true;

}(UzelZam[i - 1, t] == 10)

{[t][0] = true;[t][1] = false;[t][2] = true;[t][3] = false;

}(UzelZam[i - 1, t] == 11)

{[t][0] = true;[t][1] = false;[t][2] = true;[t][3] = true;

}(UzelZam[i - 1, t] == 12)

{[t][0] = true;[t][1] = true;[t][2] = false;[t][3] = false;

}(UzelZam[i - 1, t] == 13)

{[t][0] = true;[t][1] = true;[t][2] = false;[t][3] = true;

}(UzelZam[i - 1, t] == 14)

{[t][0] = true;[t][1] = true;[t][2] = true;[t][3] = false;

}(UzelZam[i - 1, t] == 15)

{[t][0] = true;[t][1] = true;[t][2] = true;[t][3] = true;

}

}

//вывод на экран(int t = 0; t < 8; t++)

{.Items.Add("Узел замены S" + (t + 1) + " = " + (UzelZam[i - 1, t]));.Items.Add("В битах: ");(int e = 0; e < 4; e++)

{+= (TTT[t][e] ? 1: 0).ToString();

}.Items.Add(bufff);= "";

}

//восстанавливаем(int t = 0; t < 8; t++)

{(t == 0)

{[0] = TTT[0][0];[1] = TTT[0][1];[2] = TTT[0][2];[3] = TTT[0][3];

}(t == 1)

{[4] = TTT[1][0];[5] = TTT[1][1];[6] = TTT[1][2];[7] = TTT[1][3];

}(t == 2)

{[8] = TTT[2][0];[9] = TTT[2][1];[10] = TTT[2][2];[11] = TTT[2][3];

}(t == 3)

{[12] = TTT[3][0];[13] = TTT[3][1];[14] = TTT[3][2];[15] = TTT[3][3];

}(t == 4)

{[16] = TTT[4][0];[17] = TTT[4][1];[18] = TTT[4][2];[19] = TTT[4][3];

}(t == 5)

{[20] = TTT[5][0];[21] = TTT[5][1];[22] = TTT[5][2];[23] = TTT[5][3];

}(t == 6)

{[24] = TTT[6][0];[25] = TTT[6][1];[26] = TTT[6][2];[27] = TTT[6][3];

}(t == 7)

{[28] = TTT[7][0];[29] = TTT[7][1];[30] = TTT[7][2];[31] = TTT[7][3];

}

}

//выводим.Items.Add("Объединенные 8 элементов:");(int t = 0; t < 32; t++)

{((t == 7) || (t == 15) || (t == 23) || (t == 31))

{+= (HShtrih[t] ? 1: 0).ToString();+= " ";

}

{+= (HShtrih[t] ? 1: 0).ToString();

}

}.Items.Add(bufff);= "";

//переставляем P(int h = 0; h < 32; h++)

{[h] = HShtrih[P[h] - 1];

}

//выводим.Items.Add("Перестановка P:");(int t = 0; t < 32; t++)

{((t == 7) || (t == 15) || (t == 23) || (t == 31))

{+= (Funk[t] ? 1: 0).ToString();+= " ";

}

{+= (Funk[t] ? 1: 0).ToString();

}

}.Items.Add(bufff);= "";(i!= 16)

{[i] = L0[i - 1];[i]=H0[i-1].Xor(Funk);

//выводим.Items.Add("Часть H" + i + " после итерации:");(int bn = 0; bn < 32; bn++)

{((bn == 7) || (bn == 15) || (bn == 23) || (bn == 31))

{+= (H0[i][bn] ? 1: 0).ToString();+= " ";

}

{+= (H0[i][bn] ? 1: 0).ToString();

}

}.Items.Add(bufff);= "";.Items.Add("Часть L" + i + " после итерации:");(int bn = 0; bn < 32; bn++)

{((bn == 7) || (bn == 15) || (bn == 23) || (bn == 31))

{+= (L0[i][bn] ? 1: 0).ToString();+= " ";

}

{+= (L0[i][bn] ? 1: 0).ToString();

}

}.Items.Add(bufff);= "";

}

//последняя итерация

{[i] = L0[i - 1];[i] = H0[i - 1].Xor(Funk);

//выводим.Items.Add("Часть L" + i + " после итерации:");(int bn = 0; bn < 32; bn++)

{((bn == 7) || (bn == 15) || (bn == 23) || (bn == 31))

{+= (L0[i][bn] ? 1: 0).ToString();+= " ";

}

{+= (L0[i][bn] ? 1: 0).ToString();

}

}.Items.Add(bufff);= "";.Items.Add("Часть H" + i + " после итерации:");(int bn = 0; bn < 32; bn++)

{((bn == 7) || (bn == 15) || (bn == 23) || (bn == 31))

{+= (H0[i][bn] ? 1: 0).ToString();+= " ";

}

{+= (H0[i][bn] ? 1: 0).ToString();

}

}.Items.Add(bufff);= "";

//соединяем(int t = 0; t < 32; t++)

{[counttt][t] = H0[i][t];[counttt][t+32] = L0[i][t];

}(vector == true)

{(Shifr == true)

{(btTransp.Length!= 1)

{(counttt!= 0)

{[counttt].Xor(ItogPredv[counttt - 1]);

}

}

}(Shifr == false)

{= new BitArray[btTransp.Length];(int a = 0; a < btTransp.Length; a++)

{[a] = new BitArray(64);

}(counttt == 0)

{[0] = ItogPredv[counttt];[counttt].Xor(Vekt);

}

{[counttt] = ItogPredv[counttt];[counttt].Xor(CBCItog[counttt - 1]);

}

}

}

//выводим.Items.Add("Собранный блок 64 бит:");(int bn = 0; bn < 64; bn++)

{((bn == 7) || (bn == 15) || (bn == 23) || (bn == 31) || (bn == 39) || (bn == 47) || (bn == 55))

{+= (ItogPredv[counttt][bn] ? 1: 0).ToString();+= " ";

}

{+= (ItogPredv[counttt][bn] ? 1: 0).ToString();

}

}.Items.Add(bufff);= "";

//транспонируем IP-1(int h = 0; h < 64; h++)

{[counttt][h] = ItogPredv[counttt][IP1[h] - 1];

}

//выводим.Items.Add("Транспонированный IP-1 блок 64 бит:");(int bn = 0; bn < 64; bn++)

{((bn == 7) || (bn == 15) || (bn == 23) || (bn == 31) || (bn == 39) || (bn == 47) || (bn == 55))

{+= (Itog[counttt][bn] ? 1: 0).ToString();+= " ";

}

{+= (Itog[counttt][bn] ? 1: 0).ToString();

}

}.Items.Add(bufff);= "";

//переворачиваем каждые 8 бит(int t = 0; t < 8; t++)

{[counttt][t] = Itog[counttt][7-t];[counttt][t+8] = Itog[counttt][15 - t];[counttt][t+16] = Itog[counttt][23 - t];[counttt][t+24] = Itog[counttt][31 - t];[counttt][t+32] = Itog[counttt][39 - t];[counttt][t+40] = Itog[counttt][47 - t];[counttt][t+48] = Itog[counttt][55 - t];[counttt][t+56] = Itog[counttt][63 - t];

}

//выводим.Items.Add("Перевернутый блок 64 бит (из-за BitArray C#):");(int bn = 0; bn < 64; bn++)

{((bn == 7) || (bn == 15) || (bn == 23) || (bn == 31) || (bn == 39) || (bn == 47) || (bn == 55))

{+= (ItogPredv[counttt][bn] ? 1: 0).ToString();+= " ";

}

{+= (ItogPredv[counttt][bn] ? 1: 0).ToString();

}

}.Items.Add(bufff);= "";

//в привычную письменность(Shifr == true)

{.Text += BitArrayToStr(ItogPredv[counttt]);

}

{.Text += BitArrayToStr(ItogPredv[counttt]);

}

}

}

}

}

//из bitarray в string)String BitArrayToStr(BitArray ba)

{[] strArr = new byte[ba.Length / 8];.Text.ASCIIEncoding encoding = new System.Text.ASCIIEncoding();(int i = 0; i < ba.Length / 8; i++)

{(int index = i * 8, m = 1; index < i * 8 + 8; index++, m *= 2)

{[i] += ba.Get(index) ? (byte)m: (byte)0;

}

}Encoding.Default.GetString(strArr);

}

//выработка ключевых элементовvoid KEYS()

{=new BitArray(28);= new BitArray(28);= new BitArray(28);= new BitArray(28);= new BitArray[16];= new BitArray[16];= new BitArray(56);(int i = 0; i < 16; i++)

{[i] = new BitArray(48);[i] = new BitArray(56);

}

//перестановка PC1(int h =0; h < 56; h++)

{[h] = btKluch2[PC1[h] - 1];

}.Items.Add("Ключ после перестановки PC1");(int n = 0; n < 56; n++)

{((n == 7) || (n == 15) || (n == 23) || (n == 31) || (n == 39) || (n == 47))

{+= (btKluch1[n] ? 1: 0).ToString();+= " ";

}

{+= (btKluch1[n] ? 1: 0).ToString();

}

}.Items.Add(bufff);= "";

//делим на две 28 битовые части(int w = 0; w < 28; w++)

{[w] = btKluch1[w];[w] = btKluch1[w+28];

}.Items.Add("Ключ С (Левая часть)");(int n = 0; n < 28; n++)

{+= (kluchC0[n] ? 1: 0).ToString();

}.Items.Add(bufff);= "";.Items.Add("Ключ D (Правая часть)");(int n = 0; n < 28; n++)

{+= (kluchD0[n] ? 1: 0).ToString();

}.Items.Add(bufff);= "";

//сдвигаем(int i = 0; i < 16; i++)

{(int t = 0; t < 28; t++)

{(SDVIGG[i] == 1)

{(t!= 27)

{[t] = kluchC0[t + 1];[t] = kluchD0[t + 1];

}

{[t] = kluchC0[0];[t] = kluchD0[0];

}

}

{((t!= 27) && (t!= 26))

{[t] = kluchC0[t + 2];[t] = kluchD0[t + 2];

}

{(t == 26)

{[t] = kluchC0[0];[t] = kluchD0[0];

}

{[t] = kluchC0[1];[t] = kluchD0[1];

}

}

}

}(int m = 0; m < 56; m++)

{(m < 28)

{[i][m] = kluchC1[m];

}

{[i][m] = kluchD1[m-28];

}

}(int f = 0; f < 28; f++)

{[f] = kluchC1[f];[f] = kluchD1[f];

}

}

//преобразуем в ключевые элементы(int i = 0; i < 16; i++)

{(int h = 0; h < 48; h++)

{[i][h] = KLUCHIPREDVORITELNII[i][PC2[h] - 1];

}

}(int i = 0; i < 16; i++)

{.Items.Add((i + 1) + "й ключ после сдвига");(int n = 0; n < 56; n++)

{((n == 7) || (n == 15) || (n == 23) || (n == 31) || (n == 39) || (n == 47))

{+= (KLUCHIPREDVORITELNII[i][n] ? 1: 0).ToString();+= " ";

}

{+= (KLUCHIPREDVORITELNII[i][n] ? 1: 0).ToString();

}

}.Items.Add(bufff);= "";

}(int i = 0; i < 16; i++)

{.Items.Add((i + 1) + "й ключевой элемент");(int n = 0; n < 48; n++)

{((n == 7) || (n == 15) || (n == 23) || (n == 31) || (n == 39) || (n == 47))

{+= (KLUCHI[i][n] ? 1: 0).ToString();+= " ";

}

{+= (KLUCHI[i][n] ? 1: 0).ToString();

}

}.Items.Add(bufff);= "";

}

}

Похожие работы на - Разработка криптографической программы (стандарт DES)

 

Не нашли материал для своей работы?
Поможем написать уникальную работу
Без плагиата!