Алгоритм шифрования DES, Triple DES

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

Алгоритм шифрования DES, Triple DES

Введение


Быстро развивающиеся компьютерные информационные технологии вносят заметные изменения в нашу жизнь. Всё чаще понятие «информация» используется как обозначение специального товара, который можно приобрести, продать, обменять на что-то другое и т.п. При этом стоимость информации превосходит стоимость компьютерной системы, в которой она находится. Поэтому вполне естественно возникает потребность в защите информации от несанкционированного доступа, умышленного изменения, кражи, уничтожения и других преступных действий.

Защита информации - это комплекс организационных, правовых и технических мер по предотвращению угроз информационной безопасности и устранению их последствий.

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

Актуальность и важность проблемы обеспечения безопасности информационных технологий обусловлены следующими причинами:

·        резкое увеличение вычислительной мощности современных компьютеров при одновременном упрощении их эксплуатации;

·        резкое увеличение объёмов информации, накапливаемой, хранимой и обрабатываемой с помощью компьютеров и других средств автоматизации;

·        сосредоточение в единых базах данных информации различного назначения и различной принадлежности;

·        высокие темпы роста парка персональных компьютеров, находящиеся в эксплуатации в самых разных сферах деятельности;

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

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

·        повсеместное распространение сетевых технологий и объединение локальных сетей в глобальные;

·        развитие глобальной сети Internet, практически не препятствующей нарушениям безопасности систем обработки информации во всем мире.

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

Основными задачами обеспечения информационной безопасности, которые решаются с помощью криптографии являются:

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

·        аутентификация сторон, устанавливающих связь;

·        авторизация пользователей при доступе к телекоммуникационным и информационным службам.

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

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

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

Предметом исследования выступает симметричная система шифрования данных DES.

1. Криптография и шифрование

информационный безопасность криптография шифрование

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

Шифрование используется человечеством с того самого момента, как появилась первая секретная информация, т.е. такая, доступ к которой должен быть ограничен.

Идея шифрования состоит в предотвращении просмотра истинного содержания сообщения (текста, файла и т.п.) теми, у кого нет средств его дешифрования. А прочесть файл сможет лишь тот, кто сможет его дешифровать.

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

Один из самых известных методов шифрования носит имя Цезаря, который если и не сам его изобрел, то активно им пользовался. Не доверяя своим посыльным, он шифровал письма элементарной заменой А на D, В на Е и так далее по всему латинскому алфавиту. При таком кодировании комбинация XYZ была бы записана как АВС, а слово «ключ» превратилось бы в неудобоваримое «нобъ» (прямой код N+3).

Спустя 500 лет шифрование стало повсеместно использоваться при оставлении текстов религиозного содержания, молитв и важных государственных документов.

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

Большинство из нас постоянно используют шифрование, хотя и не всегда знают об этом. Если у вас установлена операционная система Microsoft, то знайте, что Windows хранит о вас (как минимум) следующую секретную информацию:

• пароли для доступа к сетевым ресурсам (домен, принтер, компьютеры в сети и т.п.);

• пароли для доступа в Интернет с помощью DialUр;

• кэш паролей (в браузере есть такая функция - кэшировать пароли, и Windows сохраняет все когда-либо вводимые вами в Интернете пароли);

• сертификаты для доступа к сетевым ресурсам и зашифрованным данным на самом компьютере.

Эти данные хранятся либо в рwl-файле (в Windows 95), либо в SAM-файле (в Windows NT/2000/XР). Это файл Реестра Windows, и потому операционная система никому не даст к нему доступа даже на чтение. Злоумышленник может скопировать такие файлы, только загрузившись в другую ОС или с дискеты. Утилит для их взлома достаточно много, самые современные из них способны подобрать ключ за несколько часов.

1.1 Основные понятия и определения криптографии

Итак, криптография дает возможность преобразовать информацию таким образом, что ее прочтение (восстановление) возможно только при знании ключа.

Перечислю вначале некоторые основные понятия и определения.

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

Текст - упорядоченный набор из элементов алфавита.

В качестве примеров алфавитов, используемых в современных ИС можно привести следующие:

·        алфавит Z33 - 32 буквы русского алфавита и пробел;

·        алфавит Z256 - символы, входящие в стандартные коды ASCII и КОИ-8;

·        бинарный алфавит - Z2 = {0,1};

·        восьмеричный алфавит или шестнадцатеричный алфавит;

Шифрование - преобразовательный процесс: исходный текст, который носит также название открытого текста, заменяется шифрованным текстом.

Дешифрование - обратный шифрованию процесс. На основе ключа шифрованный текст преобразуется в исходный.

Ключ - информация, необходимая для беспрепятственного шифрования и дешифрования текстов.

Криптографическая система представляет собой семейство T преобразований открытого текста. xлены этого семейства индексируются, или обозначаются символом k; параметр k является ключом. Пространство ключей K - это набор возможных значений ключа. Обычно ключ представляет собой последовательный ряд букв алфавита.

Криптосистемы разделяются на симметричные и с открытым ключом (или асимметричесские).

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

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

Термины распределение ключей и управление ключами относятся к процессам системы обработки информации, содержанием которых является составление и распределение ключей между пользователями.

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

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

·        количество всех возможных ключей;

·        среднее время, необходимое для криптоанализа.

Преобразование Tk определяется соответствующим алгоритмом и значением параметра k. Эффективность шифрования с целью защиты информации зависит от сохранения тайны ключа и криптостойкости шифра.

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

Для современных криптографических систем защиты информации сформулированы следующие общепринятые требования:

·        зашифрованное сообщение должно поддаваться чтению только при наличии ключа;

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

·        должно быть не меньше общего числа возможных ключей;

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

·        знание алгоритма шифрования не должно влиять на надежность защиты;

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

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

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

·        длина шифрованного текста должна быть равной длине исходного текста;

·        любой ключ из множества возможных должен обеспечивать надежную защиту информации;

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

1.2 Симметричные и асимметричные криптосистемы


Прежде чем перейти к отдельным алгоритмам, рассмотрим вкратце концепцию симметричных и асимметричных криптосистем. Сгенерировать секретный ключ и зашифровать им сообщение - это еще полдела. А вот как переслать такой ключ тому, кто должен с его помощью расшифровать исходное сообщение? Передача шифрующего ключа считается одной из основных проблем криптографии.

Оставаясь в рамках симметричной системы, необходимо иметь надежный канал связи для передачи секретного ключа. Но такой канал не всегда бывает доступен, и потому американские математики Диффи, Хеллман и Меркле разработали в 1976 г. концепцию открытого ключа и асимметричного шифрования.

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

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

 

1.3 Основные современные методы шифрования


Среди разнообразнейших способов шифровании можно выделить следующие основные методы:

• Алгоритмы замены или подстановки - символы исходного текста заменяются на символы другого (или того же) алфавита в соответствии с заранее определенной схемой, которая и будет ключом данного шифра. Отдельно этот метод в современных криптосистемах практически не используется из-за чрезвычайно низкой криптостойкости.

• Алгоритмы перестановки - символы оригинального текста меняются местами по определенному принципу, являющемуся секретным ключом. Алгоритм перестановки сам по себе обладает низкой криптостойкостью, но входит в качестве элемента в очень многие современные криптосистемы.

• Алгоритмы гаммирования - символы исходного текста складываются с символами некой случайной последовательности. Самым распространенным примером считается шифрование файлов «имя пользователя. рwl», в которых операционная система Microsoft Windows 95 хранит пароли к сетевым ресурсам данного пользователя (пароли на вход в NT-серверы, пароли для DialUр-доступа в Интернет и т.д.). Когда пользователь вводит свой пароль при входе в Windows 95, из него по алгоритму шифрования RC4 генерируется гамма (всегда одна и та же), применяемая для шифрования сетевых паролей. Простота подбора пароля обусловливается в данном случае тем, что Windows всегда предпочитает одну и ту же гамму.

• Алгоритмы, основанные на сложных математических преобразованиях исходного текста по некоторой формуле. Многие из них используют нерешенные математические задачи. Например, широко используемый в Интернете алгоритм шифрования RSA основан на свойствах простых чисел.

• Комбинированные методы. Последовательное шифрование исходного текста с помощью двух и более методов.

1.4 Комбинированные методы шифрования

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

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

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

Вообще говоря, комбинировать можно любые методы шифрования и в любом количестве, однако на практике наибольшее распространение получили следующие комбинации:

1)      подстановка + гаммирование;

2)      перестановка + гаммирование;

)        гаммирование + гаммирование;

)        паодстановка + перестановка;

Типичным примером комбинированного шифра является национальный стандарт США криптографического закрытия данных (DES).

2. Алгоритм DES

Стандарт шифрования данных DES опубликован в 1977 г. Национальным бюро стандартом США.

Стандарт DES предназначен для защиты от несанкционированного доступа к важной, но несекретной информации в государственных и коммерческих организациях США. Алгоритм, положенный в основу стандарта, распространялся достаточно быстро, и уже в 1980 г. Был одобрен Национальным институтом стандартов и технологий США. С этого момента DES превращается в стандарт не только по названию, но и фактически. Появляются программное обеспечение и специализированные микроЭВМ, предназначенные для шифрования и расшифрования информации в сетях передачи данных.

К настоящему времени DES является наиболее распространенным алгоритмом, используемым в системах защиты коммерческой информации. Более того, реализация алгоритма DES в таких системах становится признаком хорошего тона.

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

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

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

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

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

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

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

Рис. 1

Необходимо сразу же отметить, что ВСЕ таблицы, приведенные в данной статье, являются СТАНДАРТНЫМИ, а следовательно должны включаться в вашу реализацию алгоритма в неизменном виде. Все перестановки и коды в таблицах подобраны разработчиками таким образом, чтобы максимально затруднить процесс расшифровки путем подбора ключа. Структура алгоритма DES приведена на рис. 2.

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

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

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

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

50 42 34 26 18 10 02

52 44 36 28 20 12 04

54 46 38 30 22 14 06

56 48 40 32 24 16 08

49 41 33 25 17 09 01

51 43 35 27 19 11 03

53 45 37 29 21 13 05

55 47 39 31 23 15 07

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

L(i) = R (i-1)(i) = L (i-1) xor f (R(i-1), K(i)),

где xor - операция ИСКЛЮЧАЮЩЕЕ ИЛИ.

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

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

Затем позиции битов этой последовательности переставляют в соответствии с матрицей IP-1 (табл. 2).

Таблица 2: Матрица обратной перестановки IP-1

40 08 48 16 56 24 64 32

07 47 15 55 23 63 31

06 46 14 54 22 62 30

05 45 13 53 21 61 29

04 44 12 52 20 60 28

03 43 11 51 19 59 27

02 42 10 50 18 58 26

01 41 09 49 17 57 25

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

Процесс расшифрования данных является инверсным по отношению к процессу шифрования. Все действия должны быть выполнены в обратном порядке. Это означает, что расшифровываемые данные сначала переставляются в соответствии с матрицей IP-1, а затем над последовательностью бит R(16) L(16) выполняются те же действия, что и в процессе шифрования, но в обратном порядке.

Итеративный процесс расшифрования может быть описан следующими формулами:

R (i-1) = L(i), i = 1, 2,…, 16;(i-1) = R(i) xor f (L(i), K(i)), i = 1, 2,…, 16.

На 16-й итерации получают последовательности L(0) и R(0), которые конкатенируют в 64-битовую последовательность L(0) R(0).

Затем позиции битов этой последовательности переставляют в соответствии с матрицей IP. Результат такой перестановки - исходная 64-битовая последовательность.


Рис. 3. Вычисление функции f (R(i-1), K(i))

Для вычисления значения функции f используются следующие функции-матрицы:

Е - расширение 32-битовой последовательности до 48-битовой,, S2,…, S8 - преобразование 6-битового блока в 4-битовый,

Р - перестановка бит в 32-битовой последовательности.

Функция расширения Е определяется табл. 3. В соответствии с этой таблицей первые 3 бита Е (R(i-1)) - это биты 32, 1 и 2, а последние - 31, 32 и 1.

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

01 02 03 04 05

05 06 07 08 09

09 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 01

Результат функции Е (R(i-1)) есть 48-битовая последовательность, которая складывается по модулю 2 (операция xor) с 48-битовым ключом К(i). Получается 48-битовая последовательность, которая разбивается на восемь 6-битовых блоков B(1) B(2) B(3) B(4) B(5) B(6) B(7) B(8). То есть:

E (R(i-1)) xor K(i) = B(1) B(2)… B(8).

Функции S1, S2,…, S8 определяются табл. 4.

Таблица 4


К табл. 4. требуются дополнительные пояснения. Пусть на вход функции-матрицы Sj поступает 6-битовый блок B(j) = b1b2b3b4b5b6, тогда двухбитовое число b1b6 указывает номер строки матрицы, а b2b3b4b5 - номер столбца. Результатом Sj (B(j)) будет 4-битовый элемент, расположенный на пересечении указанных строки и столбца.

Например, В(1)=011011. Тогда S1 (В(1)) расположен на пересечении строки 1 и столбца 13. В столбце 13 строки 1 задано значение 5. Значит, S1 (011011)=0101.

Применив операцию выбора к каждому из 6-битовых блоков B(1), B(2),…, B(8), получаем 32-битовую последовательность S1 (B(1)) S2 (B(2)) S3 (B(3))… S8 (B(8)).

Наконец, для получения результата функции шифрования надо переставить биты этой последовательности. Для этого применяется функция перестановки P (табл. 5). Во входной последовательности биты перестанавливаются так, чтобы бит 16 стал битом 1, а бит 7 - битом 2 и т.д.

Таблица 5: Функция перестановки P

07 20 21

12 28 17

15 23 26

18 31 10

08 24 14

27 03 09

13 30 06

11 04 25

Таким образом,

f (R(i-1), K(i)) = P (S1 (B(1)),… S8 (B(8)))

Чтобы завершить описание алгоритма шифрования данных, осталось привести алгоритм получения 48-битовых ключей К(i), i=1…16. На каждой итерации используется новое значение ключа K(i), которое вычисляется из начального ключа K. K представляет собой 64-битовый блок с восемью битами контроля по четности, расположенными в позициях 8,16,24,32,40,48,56,64.

Для удаления контрольных битов и перестановки остальных используется функция G первоначальной подготовки ключа (табл. 6).

Таблица 6

Матрица G первоначальной подготовки ключа

49 41 33 25 17 09

58 50 42 34 26 18

02 59 51 43 35 27

11 03 60 52 44 36

55 47 39 31 23 15

62 54 46 38 30 22

06 61 53 45 37 29

13 05 28 20 12 04

Результат преобразования G(K) разбивается на два 28-битовых блока C(0) и D(0), причем C(0) будет состоять из битов 57, 49,…, 44, 36 ключа K, а D(0) будет состоять из битов 63, 55,…, 12, 4 ключа K. После определения C(0) и D(0) рекурсивно определяются C(i) и D(i), i=1…16. Для этого применяют циклический сдвиг влево на один или два бита в зависимости от номера итерации, как показано в табл. 7.

Таблица 7. Таблица сдвигов для вычисления ключа

Номер итерации

Сдвиг (бит)

01

1

02

1

03

2

04

2

05

2

06

2

07

2

08

2

09

1

10

11

2

12

2

13

2

14

2

15

2

16

1



Полученное значение вновь «перемешивается» в соответствии с матрицей H (табл. 8).

Таблица 8: Матрица H завершающей обработки ключа

17 11 24 01 05

28 15 06 21 10

19 12 04 26 08

07 27 20 13 02

52 31 37 47 55

40 51 45 33 48

49 39 56 34 53

42 50 36 29 32

Ключ K(i) будет состоять из битов 14, 17,…, 29, 32 последовательности C(i) D(i). Таким образом:

(i) = H (C(i) D(i))

Блок-схема алгоритма вычисления ключа приведена на рис. 4.

Рис. 4. Блок-схема алгоритма вычисления ключа K(i)

Восстановление исходного текста осуществляется по этому алгоритму, но вначале вы используете ключ K(15), затем - K(14) и так далее. Теперь вам должно быть понятно, почему автор настойчиво рекомендует использовать приведенные матрицы. Если вы начнете самовольничать, вы, должно быть, получите очень секретный шифр, но вы сами не сможете его потом раскрыть!

2.1 Режимы работы алгоритма DES

Для наиболее полного удовлетворения всем требованиям, предъявляемым к коммерческим системам шифрования, реализованы несколько режимов работы алгоритма DES. Наиболее широкое распространение получили режимы:

·        электронный шифроблокнот (Electronic Codebook) - ECB;

·        цепочка цифровых блоков (Cipher Block Chaining) - CBC;

·        цифровая обратная связь (Cipher Feedback) - CFB;

·        внешняя обратная связь (Output Feedback) - OFB.

DES-ECB

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

Рис. 5. Работа алгоритма DES в режиме ECB

В частности, не рекомендуется использовать данный режим работы для шифрования EXE файлов, потому что первый же блок - заголовок файла, является вполне удачным началом для взлома всего шифра.

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

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

Рис. 6. Работа алгоритма в режиме CBC

Таким образом для всех i = 1…n блок шифртекста C(i) определяется следующим образом:

C(i) = DES (M(i) xor C (i-1)),

(0) = IV - начальное значение шифра, равное начальному вектору.

Расшифрование выполняется следующим образом:

M(i) = C (i-1) xor DES-1 (C(i)),

(0) = IV - начальное значение шифра, равное начальному вектору.

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

DES-CFB

В этом режиме размер блока может отличаться от 64. Исходный файл M считывается последовательными t-битовыми блоками (t <= 64): M = M(1) M(2)… M(n) (остаток дописывается нулями или пробелами).

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

Для всех i = 1…n блок шифртекста C(i) определяется следующим образом:

(i) = M(i) xor P (i-1),

где P (i-1) - старшие t битов операции DES (С(i-1)), причем C(0)=IV.

Обновление сдвигового регистра осуществляется путем удаления его старших t битов и дописывания справа C(i).

Восстановление зашифрованных данных также не представляет труда: P (i-1) и C(i) вычисляются аналогичным образом и

(i) = C(i) xor P (i-1).

Блок-схема режима CFB приведена на рис. 7.

Рис. 7. Работа алгоритма DES в режиме CFB

OFB

Режим OFB очень похож на режим CFB.

Отличие от режима CFB состоит только в методе обновления сдвигового регистра. В данном случае это осуществляется путем удаления его старших t битов и дописывания справа P (i-1) (рис. 8).



Каждому из рассмотренных режимов свойственны свои достоинства и недостатки, что обусловливает области их применения.

3. Надежность использования DES

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

Если использовать DES для шифрования файлов на жестком диске, то часто менять ключи малореально, так как для этого необходимо расшифровать, а затем зашифровать все файлы новым ключом. Вместо этого можно создать главный ключ DES, каким будет зашифрованный список ключей DES, используемых для шифрования файлов; в этом случае главный ключ можно менять так часто как это нужно. Но так как главный ключ более привлекателен для атаки чем отдельные DES ключи, то его разумно шифровать алгоритмом Triple DES.

 

Заключение

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

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

Приведу оценки стойкости рассмотренных выше методов шифрования. Моноалфавитная подстановка является наименее стойким шифром, так как при ее использовании сохраняются все статистические закономерности исходного текста. Уже при длине в 20-30 символов указанные закономерности проявляются в такой степени, что, как правило, позволяет вскрыть исходный текст. Поэтому такое шифрование считается пригодным только для закрывания паролей, коротких сигнальных сообщений и отдельных знаков.

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

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

Можно отметить, что для надежного закрытия больших массивов информации наиболее пригодны гаммирование и усложненные перестановки и подстановки.

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

Алгоритм DES был утвержден еще долее 20 лет назад, однако за это время компьютеры сделали немыслимый скачок в скорости вычислений, и сейчас не так уж трудно сломать этот алгоритм путем полного перебора всех возможных вариантов ключей (а в DES используется всего 8-байтный), что недавно казалось совершенно невозможным.

ГОСТ 28147-89 был разработан еще спецслужбами Советского Союза, и он моложе DES всего на 10 лет; при разработке в него был заложен такой запас прочности, что данный ГОСТ является актуальным до сих пор.

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

 

Список использованных источников

1. Ю.В. Романец, П.А. Тимофеев, В.Ф. Шаньгин Защита информации в компьютерных системах и сетях: Радио и связь: Москва, 1999. - 328 с.

. Брюс Шнайер, Прикладная криптография: БХВ-Питер: Санкт-Петербург, 2004. - 718 с.

. Петров А.А. Компьютерная безопасность. Криптографические методы защиты. ДМК Москва, 2000 г.

. «Методы и средства защиты информации» (курс лекций). Авторские права: Беляев А.В. (http://www.citforum.ru/internet/infsecure/index.shtml)

. Криптография (http://www.citforum.ru/internet/securities/crypto.shtml)

Приложение

DES;Crt;Label1, Label2, StartC, StartU, All, Cntr1, Cntr2, VVod;F, Out:text;, Key, Finish: String[8];, So:string;, A, Control, Control2:char;, u, k2, z, temp:integer;, S2, S3, S4, S5, S6, S7, S8:array [0.. 3,0..15] of integer;Crypt; // процедура выполняющая зашифрование.// ввод шифруемый текст (8 символов) (Text), исходный ключ(Key).

// Вывод зашифрованная последовательность(Final)., UseTextIPTemp:array [0..63] of integer;  

IPTemp, IP, UseTextIP, UseTextBIN2:array [1..64] of integer;

UseTextIPTemp:array [0..63] of integer;                    

W:array [1..8] of integer;

KeyBIN:array [0..63] of integer;:array [1..64] of integer;:array [1..56] Of Integer;, RforPTemp, RE, REKey:array [1..48] of integer;, S2, S3, S4, S5, S6, S7, S8:array [0.. 3,0..15] of integer;, R:array [0.. 17,1..32] of integer;, B2, B3, B4, B5, B6, B7, B8:array [1..6] of integer;, P:array [1..32] of integer;:array [1.. 8,1..4] of integer;, TempC2, TempD, TempD2, m1, n1, m2, n2, m3, n3, m4, n4, m5, n5, m6, n6, m7, n7, m8, n8:integer;, KeyHTemp:array [1..56] of integer;, D:array [0.. 16,1..28] of integer;:array [1.. 16,1..48] of integer;:array [0..7] of integer;:array [0..7] of integer;:array [0.. 7,0..7] of integer;, j, m, n, p1, q1, q2, f, Counter, Val, v, x:integer; PerevodBIN; // процедура переводит десятичные числа

var j, i:integer; // в двоичные

Begin For j:=0 to 7 doP1:=2*Temp[j]; n:=0;i:=0 to 7 don:=n+2; p1:=p1 div 2;(Temp[j]/n)>=0.5 then A[i]:=p1 mod 2 else A[i]:=0; end;i:=0 to 7 do A2 [j, i]:=A [7-i]; end;;i:=1 to 8 do Temp [i-1]:=Ord (Text[i]);;:=-1;m:=0 to 7 don:=0 to 7 do Begin i:=i+1; UseTextBIN[i]:=A2 [m, n]; end;i:=0 to 63 do UseTextBIN2 [i+1]:=UseTextBIN[i]; {IP}:=58; // перестановка IPi:=0 to 7 doUseTextIPTemp[i]:=UseTextBIN2 [Counter]; Counter:=Counter-8; end;:=60;i:=8 to 15 doUseTextIPTemp[i]:=UseTextBIN2 [Counter]; Counter:=Counter-8; end;:=62;i:=16 to 23 doUseTextIPTemp[i]:=UseTextBIN2 [Counter]; Counter:=Counter-8; end;:=64;i:=24 to 31 doUseTextIPTemp[i]:=UseTextBIN2 [Counter]; Counter:=Counter-8; end;:=57;i:=32 to 39 doUseTextIPTemp[i]:=UseTextBIN2 [Counter]; Counter:=Counter-8; end;:=59;i:=40 to 47 doUseTextIPTemp[i]:=UseTextBIN2 [Counter]; Counter:=Counter-8; end;:=61;i:=48 to 55 doUseTextIPTemp[i]:=UseTextBIN2 [Counter]; Counter:=Counter-8; end;:=63;i:=56 to 63 doUseTextIPTemp[i]:=UseTextBIN2 [Counter]; Counter:=Counter-8; end;i:=1 to 64 do UseTextIP[i]:=UseTextIPTemp [i-1];i:=3 to 10 do Temp [i-3]:=Ord (Key[i]);;:=-1;m:=0 to 7 don:=0 to 7 do Begin i:=i+1; KeyBIN[i]:=A2 [m, n]; end;i:=0 to 63 do KeyBIN2 [i+1]:=KeyBIN[i]; // перестановка G[1]:=KeyBin2 [57]; KeyG[2]:=KeyBin2 [49]; KeyG[3]:=KeyBin2 [41];[4]:=KeyBin2 [33]; KeyG[5]:=KeyBin2 [25]; KeyG[6]:=KeyBin2 [17];[7]:=KeyBin2 [9]; KeyG[8]:=KeyBin2 [1]; KeyG[9]:=KeyBin2 [58];[10]:=KeyBin2 [50]; KeyG[11]:=KeyBin2 [42]; KeyG[12]:=KeyBin2 [34];[13]:=KeyBin2 [26]; KeyG[14]:=KeyBin2 [18]; KeyG[15]:=KeyBin2 [10];[16]:=KeyBin2 [2]; KeyG[17]:=KeyBin2 [59]; KeyG[18]:=KeyBin2 [51];[19]:=KeyBin2 [43]; KeyG[20]:=KeyBin2 [35]; KeyG[21]:=KeyBin2 [27];[22]:=KeyBin2 [19]; KeyG[23]:=KeyBin2 [11]; KeyG[24]:=KeyBin2 [3];[25]:=KeyBin2 [60]; KeyG[26]:=KeyBin2 [52]; KeyG[27]:=KeyBin2 [44];[28]:=KeyBin2 [36]; KeyG[29]:=KeyBin2 [63]; KeyG[30]:=UseKeyBin2 [55];[31]:=KeyBin2 [47]; KeyG[32]:=KeyBin2 [39]; KeyG[33]:=KeyBin2 [31];[34]:=KeyBin2 [23]; KeyG[35]:=KeyBin2 [15]; KeyG[36]:=KeyBin2 [7];[37]:=KeyBin2 [62]; KeyG[38]:=KeyBin2 [54]; KeyG[39]:=KeyBin2 [46];[40]:=KeyBin2 [38]; KeyG[41]:=KeyBin2 [30]; KeyG[42]:=KeyBin2 [22];[43]:=KeyBin2 [14]; KeyG[44]:=KeyBin2 [6]; KeyG[45]:=KeyBin2 [61];[46]:=KeyBin2 [53]; KeyG[47]:=KeyBin2 [45]; KeyG[48]:=KeyBin2 [37];[49]:=KeyBin2 [29]; KeyG[50]:=KeyBin2 [21]; KeyG[51]:=KeyBin2 [13];[52]:=KeyBin2 [5]; KeyG[53]:=KeyBin2 [28]; KeyG[54]:=KeyBin2 [20];[55]:=KeyBin2 [12]; KeyG[56]:=KeyBin2 [4];i:=1 to 28 do begin C [0, i]:=KeyG[i]; D [0, i]:=KeyG [i+28]; end; i:=1 to 16 do // цикл для вычисления ключей и сохранения их в массив K

Begin Case i of // цикл выполняющий сдвиг влево C и D              

1,2,9,16:begin:=C [i - 1,1]; TempD:=D [i - 1,1];m:=1 to 27 doC [i, m]:=C [i-1, m+1]; D [i, m]:=D [i-1, m+1]; end;[i, 28]:=TempC; D [i, 28]:=TempD; end;

,4,5,6,7,8,10,11,12,13,14,15:begin:=C [i - 1,1]; TempD:=D [i - 1,1];:=C [i - 1,2]; TempD2:=D [i - 1,2];m:=1 to 26 doC [i, m]:=C [i-1, m+2]; D [i, m]:=D [i-1, m+2]; end;[i, 27]:=TempC; D [i, 27]:=TempD;[i, 28]:=TempC2; D [i, 28]:=TempD2;; end;j:=1 to 28 do KeyHTemp[j]:=C [i, j];j:=1 to 28 do KeyHTemp [j+28]:=D [i, j]; [i, 1]:=KeyHtemp[14]; K [i, 2]:=KeyHtemp[17]; K [i, 3]:=KeyHtemp[11]; // перестановка H для определения используемых ключей

K [i, 4]:=KeyHtemp[24]; K [i, 5]:=KeyHtemp[1]; K [i, 6]:=KeyHtemp[5];       K [i, 7]:=KeyHtemp[3]; K [i, 8]:=KeyHtemp[28]; K [i, 9]:=KeyHtemp[15];[i, 10]:=KeyHtemp[6]; K [i, 11]:=KeyHtemp[21]; K [i, 12]:=KeyHtemp[10];[i, 13]:=KeyHtemp[23]; K [i, 14]:=KeyHtemp[19]; K [i, 15]:=KeyHtemp[12];[i, 16]:=KeyHtemp[4]; K [i, 17]:=KeyHtemp[26]; K [i, 18]:=KeyHtemp[8];[i, 19]:=KeyHtemp[16]; K [i, 20]:=KeyHtemp[7]; K [i, 21]:=KeyHtemp[27];[i, 22]:=KeyHtemp[20]; K [i, 23]:=KeyHtemp[13]; K [i, 24]:=KeyHtemp[2];[i, 25]:=KeyHtemp[41]; K [i, 26]:=KeyHtemp[52]; K [i, 27]:=KeyHtemp[31];[i, 28]:=KeyHtemp[37]; K [i, 29]:=KeyHtemp[47]; K [i, 30]:=KeyHtemp[55];[i, 31]:=KeyHtemp[30]; K [i, 32]:=KeyHtemp[40]; K [i, 33]:=KeyHtemp[51];[i, 34]:=KeyHtemp[45]; K [i, 35]:=KeyHtemp[33]; K [i, 36]:=KeyHtemp[48];[i, 37]:=KeyHtemp[44]; K [i, 38]:=KeyHtemp[49]; K [i, 39]:=KeyHtemp[39];[i, 40]:=KeyHtemp[56]; K [i, 41]:=KeyHtemp[34]; K [i, 42]:=KeyHtemp[53];[i, 43]:=KeyHtemp[46]; K [i, 44]:=KeyHtemp[42]; K [i, 45]:=KeyHtemp[50];[i, 46]:=KeyHtemp[36]; K [i, 47]:=KeyHtemp[29]; K [i, 48]:=KeyHtemp[32]; end;i:=1 to 32 do L [0, i]:=UseTextIP[i];i:=1 to 32 do R [0, i]:=UseTextIP [i+32]; j:=1 to 16 do Begin // цикл выполняющий шифрование восьми символов // исходного текста после перестановки IP

RE[1]:=R [j - 1,32]; RE[2]:=R [j - 1,1]; RE[3]:=R [j - 1,2]; RE[4]:=R [j - 1,3]; // функция E

RE[5]:=R [j - 1,4]; RE[6]:=R [j - 1,5]; RE[7]:=R [j - 1,4]; RE[8]:=R [j - 1,5];[9]:=R [j - 1,6]; RE[10]:=R [j - 1,7]; RE[11]:=R [j - 1,8]; RE[12]:=R [j - 1,9];[13]:=R [j - 1,8]; RE[14]:=R [j - 1,9]; RE[15]:=R [j - 1,10]; RE[16]:=R [j - 1,11];[17]:=R [j - 1,12]; RE[18]:=R [j - 1,13]; RE[19]:=R [j - 1,12]; RE[20]:=R [j - 1,13];[21]:=R [j - 1,14]; RE[22]:=R [j - 1,15]; RE[23]:=R [j - 1,16]; RE[24]:=R [j - 1,17];[25]:=R [j - 1,16]; RE[26]:=R [j - 1,17]; RE[27]:=R [j - 1,18]; RE[28]:=R [j - 1,19];[29]:=R [j - 1,20]; RE[30]:=R [j - 1,21]; RE[31]:=R [j - 1,20]; RE[32]:=R [j - 1,21];[33]:=R [j - 1,22]; RE[34]:=R [j - 1,23]; RE[35]:=R [j - 1,24]; RE[36]:=R [j - 1,25];[37]:=R [j - 1,24]; RE[38]:=R [j - 1,25]; RE[39]:=R [j - 1,26]; RE[40]:=R [j - 1,27];[41]:=R [j - 1,28]; RE[42]:=R [j - 1,29]; RE[43]:=R [j - 1,28]; RE[44]:=R [j - 1,29];[45]:=R [j - 1,30]; RE[46]:=R [j - 1,31]; RE[47]:=R [j - 1,32]; RE[48]:=R [j - 1,1];i:=1 to 48 do REKey[i]:=(RE[i]+K [j, i]) mod 2; // сложение по модулю 2 Ri-1 и Kii:=1 to 6 do B1 [i]:=REKey[i];

// преобразование 48-ми битной последовательности в 32-х битовую

For i:=1 to 6 do B2 [i]:=Rekey [i+6];                                    i:=1 to 6 do B3 [i]:=Rekey [i+12];i:=1 to 6 do B4 [i]:=Rekey [i+18];i:=1 to 6 do B5 [i]:=Rekey [i+24];i:=1 to 6 do B6 [i]:=Rekey [i+30];i:=1 to 6 do B7 [i]:=Rekey [i+36];i:=1 to 6 do B8 [i]:=Rekey [i+42];:=B1 [1]*2+B1 [6]; n1:=B1 [2]*8+B1 [3]*4+B1 [4]*2+B1 [5];:=B2 [1]*2+B2 [6]; n2:=B2 [2]*8+B2 [3]*4+B2 [4]*2+B2 [5];:=B3 [1]*2+B3 [6]; n3:=B3 [2]*8+B3 [3]*4+B3 [4]*2+B3 [5];:=B4 [1]*2+B4 [6]; n4:=B4 [2]*8+B4 [3]*4+B4 [4]*2+B4 [5];:=B5 [1]*2+B5 [6]; n5:=B5 [2]*8+B5 [3]*4+B5 [4]*2+B5 [5];:=B6 [1]*2+B6 [6]; n6:=B6 [2]*8+B6 [3]*4+B6 [4]*2+B6 [5];:=B7 [1]*2+B7 [6]; n7:=B7 [2]*8+B7 [3]*4+B7 [4]*2+B7 [5];:=B8 [1]*2+B8 [6]; n8:=B8 [2]*8+B8 [3]*4+B8 [4]*2+B8 [5];[1]:=S1 [m1, n1]; RforP[2]:=S2 [m2, n2]; RforP[3]:=S3 [m3, n3]; // преобразование S

RforP[4]:=S4 [m4, n4]; RforP[5]:=S5 [m5, n5]; RforP[6]:=S6 [m6, n6];[7]:=S7 [m7, n7]; RforP[8]:=S8 [m8, n8];:=0; // перевод десятичных значений S в двоичные

For Val:=1 to 8 do        :=0; P1:=2*RforP[Val];i:=1 to 4 don:=n+2; P1:=P1 div 2;(RforP[Val]/n)>=0.5 Then PTemp [Val, i]:=P1 mod 2Ptemp [Val, i]:=0; end;i:=1 to 4 doCounter:=Counter+1; P[Counter]:=Ptemp [Val, 5-i]; end;;[1]:=P[16]; RW[2]:=P[7]; RW[3]:=P[20]; RW[4]:=P[21]; RW[5]:=P[29]; // значение функции F (Ri-1, Ki)

RW[6]:=P[12]; RW[7]:=P[28]; RW[8]:=P[17]; RW[9]:=P[1]; RW[10]:=P[15];[11]:=P[23]; RW[12]:=P[26]; RW[13]:=P[5]; RW[14]:=P[18]; RW[15]:=P[31];[16]:=P[10]; RW[17]:=P[2]; RW[18]:=P[8]; RW[19]:=P[24]; RW[20]:=P[14];[21]:=P[32]; RW[22]:=P[27]; RW[23]:=P[3]; RW[24]:=P[9]; RW[25]:=P[19];[26]:=P[13]; RW[27]:=P[30]; RW[28]:=P[6]; RW[29]:=P[22]; RW[30]:=P[11];[31]:=P[4]; RW[32]:=P[25];i:=1 to 32 do L [j, i]:=R [j-1, i];                                                    i:=1 to 32 do R [j, i]:=(L [j-1, i]+RW[i]) mod 2; // сложение по модулю 2 Li-1 и F (Ri-1, Ki);i:=1 to 32 do IPTemp[i]:=L [16, i];i:=1 to 32 do IPTemp [i+32]:=R [16, i];[1]:=IPTemp[40]; IP[2]:=IPTemp[8]; IP[3]:=IPTemp[48]; IP[4]:=IPTemp[16]; // конечная перестановка[5]:=IPTemp[56]; IP[6]:=IPTemp[24]; IP[7]:=IPTemp[64]; IP[8]:=IPTemp[32];[9]:=IPTemp[39]; IP[10]:=IPTemp[7]; IP[11]:=IPTemp[47]; IP[12]:=IPTemp[15];[13]:=IPTemp[55]; IP[14]:=IPTemp[23]; IP[15]:=IPTemp[63]; IP[16]:=IPTemp[31];[17]:=IPTemp[38]; IP[18]:=IPTemp[6]; IP[19]:=IPTemp[46]; IP[20]:=IPTemp[14];[21]:=IPTemp[54]; IP[22]:=IPTemp[22]; IP[23]:=IPTemp[62]; IP[24]:=IPTemp[30];[25]:=IPTemp[37]; IP[26]:=IPTemp[5]; IP[27]:=IPTemp[45]; IP[28]:=IPTemp[13];[29]:=IPTemp[53]; IP[30]:=IPTemp[21]; IP[31]:=IPTemp[61]; IP[32]:=IPTemp[29];[33]:=IPTemp[36]; IP[34]:=IPTemp[4]; IP[35]:=IPTemp[44]; IP[36]:=IPTemp[12];[37]:=IPTemp[52]; IP[38]:=IPTemp[20]; IP[39]:=IPTemp[60]; IP[40]:=IPTemp[28];[41]:=IPTemp[35]; IP[42]:=IPTemp[3]; IP[43]:=IPTemp[43]; IP[44]:=IPTemp[11];[45]:=IPTemp[51]; IP[46]:=IPTemp[19]; IP[47]:=IPTemp[59]; IP[48]:=IPTemp[27];[49]:=IPTemp[34]; IP[50]:=IPTemp[2]; IP[51]:=IPTemp[42]; IP[52]:=IPTemp[10];[53]:=IPTemp[50]; IP[54]:=IPTemp[18]; IP[55]:=IPTemp[58]; IP[56]:=IPTemp[26];[57]:=IPTemp[33]; IP[58]:=IPTemp[1]; IP[59]:=IPTemp[41]; IP[60]:=IPTemp[9];[61]:=IPTemp[49]; IP[62]:=IPTemp[17]; IP[63]:=IPTemp[57]; IP[64]:=IPTemp[25];[1]:=IP[1]*128+IP[2]*64+IP[3]*32+IP[4]*16+IP[5]*8+IP[6]*4+IP[7]*2+IP[8];[2]:=IP[9]*128+IP[10]*64+IP[11]*32+IP[12]*16+IP[13]*8+IP[14]*4+IP[15]*2+IP[16];[3]:=IP[17]*128+IP[18]*64+IP[19]*32+IP[20]*16+IP[21]*8+IP[22]*4+IP[23]*2+IP[24];[4]:=IP[25]*128+IP[26]*64+IP[27]*32+IP[28]*16+IP[29]*8+IP[30]*4+IP[31]*2+IP[32];[5]:=IP[33]*128+IP[34]*64+IP[35]*32+IP[36]*16+IP[37]*8+IP[38]*4+IP[39]*2+IP[40];[6]:=IP[41]*128+IP[42]*64+IP[43]*32+IP[44]*16+IP[45]*8+IP[46]*4+IP[47]*2+IP[48];[7]:=IP[49]*128+IP[50]*64+IP[51]*32+IP[52]*16+IP[53]*8+IP[54]*4+IP[55]*2+IP[56];[8]:=IP[57]*128+IP[58]*64+IP[59]*32+IP[60]*16+IP[61]*8+IP[62]*4+IP[63]*2+IP[64];i:=1 to 8 do Finish[i]:=Chr (W[i]); // выходная последовательность;

Procedure UnCrypt; // процедура выполняющая расшифрование.

Var // ввод расшифровываемый текст (8 символов) (Text), исходный ключ(Key).

// Вывод расшифрованная последовательность(Final).

UseTextBIN, UseTextIPTemp, UseTextIP:array [0..63] of integer;

UseTextBIN2, IPTemp, IP:array [1..64] of integer;:array [1..8] of integer;:array [0..63] of integer;:array [1..64] of integer;:array [1..56] Of Integer;, REKey, RforP, RforPTemp:array [1..48] of integer;, TempC2, TempD, TempD2:integer;, R:array [0.. 17,1..32] of integer;, B2, B3, B4, B5, B6, B7, B8:array [1..6] of integer;, P:array [1..32] of integer;:array [1.. 8,1..4] of integer;, TempC2, TempD, TempD2, m1, n1, m2, n2, m3, n3, m4, n4, m5, n5, m6, n6, m7, n7, m8, n8:integer;, KeyHTemp:array [1..56] of integer;, D:array [0.. 16,1..28] of integer;:array [1.. 16,1..48] of integer;:array [0..7] of integer;:array [0..7] of integer;:array [0.. 7,0..7] of integer;, j, m, n, p1, Counter, Val, v, x, q1, q2, f:integer; PerevodBIN; // процедура переводит десятичные числа

var j, i:integer; // в двоичные

Beginj:=0 to 7 doP1:=2*Temp[j]; n:=0;i:=0 to 7 don:=n+2; p1:=p1 div 2;(Temp[j]/n)>=0.5 then A[i]:=p1 mod 2 else A[i]:=0; end;i:=0 to 7 do A2 [j, i]:=A [7-i]; end;;i:=1 to 8 do Temp [i-1]:=Ord (Text[i]);;:=-1;m:=0 to 7 don:=0 to 7 doi:=i+1; UseTextBIN[i]:=A2 [m, n]; end;i:=0 to 63 do UseTextBIN2 [i+1]:=UseTextBIN[i];:=58; // перестановка IPi:=0 to 7 doUseTextIPTemp[i]:=UseTextBIN2 [Counter]; Counter:=Counter-8; end;:=60;i:=8 to 15 doUseTextIPTemp[i]:=UseTextBIN2 [Counter]; Counter:=Counter-8; end;:=62;i:=16 to 23 doUseTextIPTemp[i]:=UseTextBIN2 [Counter]; Counter:=Counter-8; end;:=64;i:=24 to 31 doUseTextIPTemp[i]:=UseTextBIN2 [Counter]; Counter:=Counter-8; end;:=57;i:=32 to 39 doUseTextIPTemp[i]:=UseTextBIN2 [Counter]; Counter:=Counter-8; end;:=59;i:=40 to 47 doUseTextIPTemp[i]:=UseTextBIN2 [Counter]; Counter:=Counter-8; end;:=61;i:=48 to 55 doUseTextIPTemp[i]:=UseTextBIN2 [Counter]; Counter:=Counter-8; end;:=63;i:=56 to 63 doUseTextIPTemp[i]:=UseTextBIN2 [Counter]; Counter:=Counter-8; end;i:=1 to 64 do UseTextIP[i]:=UseTextIPTemp [i-1];i:=3 to 10 do Temp [i-3]:=Ord (Key[i]);;:=-1;m:=0 to 7 don:=0 to 7 do Begin i:=i+1; KeyBIN[i]:=A2 [m, n]; end;i:=0 to 63 do KeyBIN2 [i+1]:=KeyBIN[i]; // перестановка G[1]:=KeyBin2 [57]; KeyG[2]:=KeyBin2 [49]; KeyG[3]:=KeyBin2 [41];[4]:=KeyBin2 [33]; KeyG[5]:=KeyBin2 [25]; KeyG[6]:=KeyBin2 [17];[7]:=KeyBin2 [9]; KeyG[8]:=KeyBin2 [1]; KeyG[9]:=KeyBin2 [58];[10]:=KeyBin2 [50]; KeyG[11]:=KeyBin2 [42]; KeyG[12]:=KeyBin2 [34];[13]:=KeyBin2 [26]; KeyG[14]:=KeyBin2 [18]; KeyG[15]:=KeyBin2 [10];[16]:=KeyBin2 [2]; KeyG[17]:=KeyBin2 [59]; KeyG[18]:=KeyBin2 [51];[19]:=KeyBin2 [43]; KeyG[20]:=KeyBin2 [35]; KeyG[21]:=KeyBin2 [27];[22]:=KeyBin2 [19]; KeyG[23]:=KeyBin2 [11]; KeyG[24]:=KeyBin2 [3];[25]:=KeyBin2 [60]; KeyG[26]:=KeyBin2 [52]; KeyG[27]:=KeyBin2 [44];[28]:=KeyBin2 [36]; KeyG[29]:=KeyBin2 [63]; KeyG[30]:=KeyBin2 [55];[31]:=KeyBin2 [47]; KeyG[32]:=KeyBin2 [39]; KeyG[33]:=KeyBin2 [31];[34]:=KeyBin2 [23]; KeyG[35]:=KeyBin2 [15]; KeyG[36]:=KeyBin2 [7];[37]:=KeyBin2 [62]; KeyG[38]:=KeyBin2 [54]; KeyG[39]:=KeyBin2 [46];[40]:=KeyBin2 [38]; KeyG[41]:=KeyBin2 [30]; KeyG[42]:=KeyBin2 [22];[43]:=KeyBin2 [14]; KeyG[44]:=KeyBin2 [6]; KeyG[45]:=KeyBin2 [61];[46]:=KeyBin2 [53]; KeyG[47]:=KeyBin2 [45]; KeyG[48]:=KeyBin2 [37];[49]:=KeyBin2 [29]; KeyG[50]:=KeyBin2 [21]; KeyG[51]:=KeyBin2 [13];[52]:=KeyBin2 [5]; KeyG[53]:=KeyBin2 [28]; KeyG[54]:=KeyBin2 [20];[55]:=KeyBin2 [12]; KeyG[56]:=KeyBin2 [4];i:=1 to 28 do begin C [0, i]:=KeyG[i]; D [0, i]:=KeyG [i+28]; end; i:=1 to 16 do // цикл для вычисления ключей и сохранения их в массив K

Begin

Case i of // цикл выполняющий сдвиг влево C и D

1,2,9,16:begin TempC:=C [i - 1,1]; TempD:=D [i - 1,1];m:=1 to 27 doC [i, m]:=C [i-1, m+1]; D [i, m]:=D [i-1, m+1]; end;[i, 28]:=TempC; D [i, 28]:=TempD; end;

,4,5,6,7,

,10,11,12,

,14,15:begin:=C [i - 1,1]; TempD:=D [i - 1,1]; TempC2:=C [i - 1,2]; TempD2:=D [i - 1,2];m:=1 to 26 doC [i, m]:=C [i-1, m+2]; D [i, m]:=D [i-1, m+2]; end;[i, 27]:=TempC; D [i, 27]:=TempD; C [i, 28]:=TempC2; D [i, 28]:=TempD2; end;; {Case}j:=1 to 28 do KeyHTemp[j]:=C [i, j];j:=1 to 28 do KeyHTemp [j+28]:=D [i, j]; [i, 1]:=KeyHtemp[14]; K [i, 2]:=KeyHtemp[17]; K [i, 3]:=KeyHtemp[11]; // перестановка H для определения используемых ключей

K [i, 4]:=KeyHtemp[24]; K [i, 5]:=KeyHtemp[1]; K [i, 6]:=KeyHtemp[5];       K [i, 7]:=KeyHtemp[3]; K [i, 8]:=KeyHtemp[28]; K [i, 9]:=KeyHtemp[15];[i, 10]:=KeyHtemp[6]; K [i, 11]:=KeyHtemp[21]; K [i, 12]:=KeyHtemp[10];[i, 13]:=KeyHtemp[23]; K [i, 14]:=KeyHtemp[19]; K [i, 15]:=KeyHtemp[12];[i, 16]:=KeyHtemp[4]; K [i, 17]:=KeyHtemp[26]; K [i, 18]:=KeyHtemp[8];[i, 19]:=KeyHtemp[16]; K [i, 20]:=KeyHtemp[7]; K [i, 21]:=KeyHtemp[27];[i, 22]:=KeyHtemp[20]; K [i, 23]:=KeyHtemp[13]; K [i, 24]:=KeyHtemp[2];[i, 25]:=KeyHtemp[41]; K [i, 26]:=KeyHtemp[52]; K [i, 27]:=KeyHtemp[31];[i, 28]:=KeyHtemp[37]; K [i, 29]:=KeyHtemp[47]; K [i, 30]:=KeyHtemp[55];[i, 31]:=KeyHtemp[30]; K [i, 32]:=KeyHtemp[40]; K [i, 33]:=KeyHtemp[51];[i, 34]:=KeyHtemp[45]; K [i, 35]:=KeyHtemp[33]; K [i, 36]:=KeyHtemp[48];[i, 37]:=KeyHtemp[44]; K [i, 38]:=KeyHtemp[49]; K [i, 39]:=KeyHtemp[39];[i, 40]:=KeyHtemp[56]; K [i, 41]:=KeyHtemp[34]; K [i, 42]:=KeyHtemp[53];[i, 43]:=KeyHtemp[46]; K [i, 44]:=KeyHtemp[42]; K [i, 45]:=KeyHtemp[50];[i, 46]:=KeyHtemp[36]; K [i, 47]:=KeyHtemp[29]; K [i, 48]:=KeyHtemp[32];;i:=1 to 32 do R [0, i]:=UseTextIP[i];i:=1 to 32 do L [0, i]:=UseTextIP [i+32]; j:=1 to 16 do // цикл выполняющий шифрование восьми символов

// исходного текста после перестановки IP

Begin

RE[1]:=R [j - 1,32]; RE[2]:=R [j - 1,1]; RE[3]:=R [j - 1,2]; RE[4]:=R [j - 1,3]; // функция E

RE[5]:=R [j - 1,4]; RE[6]:=R [j - 1,5]; RE[7]:=R [j - 1,4]; RE[8]:=R [j - 1,5];[9]:=R [j - 1,6]; RE[10]:=R [j - 1,7]; RE[11]:=R [j - 1,8]; RE[12]:=R [j - 1,9];[13]:=R [j - 1,8]; RE[14]:=R [j - 1,9]; RE[15]:=R [j - 1,10]; RE[16]:=R [j - 1,11];[17]:=R [j - 1,12]; RE[18]:=R [j - 1,13]; RE[19]:=R [j - 1,12]; RE[20]:=R [j - 1,13];[21]:=R [j - 1,14]; RE[22]:=R [j - 1,15]; RE[23]:=R [j - 1,16]; RE[24]:=R [j - 1,17];[25]:=R [j - 1,16]; RE[26]:=R [j - 1,17]; RE[27]:=R [j - 1,18]; RE[28]:=R [j - 1,19];[29]:=R [j - 1,20]; RE[30]:=R [j - 1,21]; RE[31]:=R [j - 1,20]; RE[32]:=R [j - 1,21];[33]:=R [j - 1,22]; RE[34]:=R [j - 1,23]; RE[35]:=R [j - 1,24]; RE[36]:=R [j - 1,25];[37]:=R [j - 1,24]; RE[38]:=R [j - 1,25]; RE[39]:=R [j - 1,26]; RE[40]:=R [j - 1,27];[41]:=R [j - 1,28]; RE[42]:=R [j - 1,29]; RE[43]:=R [j - 1,28]; RE[44]:=R [j - 1,29];[45]:=R [j - 1,30]; RE[46]:=R [j - 1,31]; RE[47]:=R [j - 1,32]; RE[48]:=R [j - 1,1];i:=1 to 48 do REKey[i]:=(RE[i]+K [17-j, i]) mod 2; // сложение по модулю 2 Ri-1 и Kii:=1 to 6 do B1 [i]:=REKey[i]; // преобразование 48-ми битной

For i:=1 to 6 do B2 [i]:=Rekey [i+6];        последовательности в 32-х битовую

For i:=1 to 6 do B3 [i]:=Rekey [i+12];i:=1 to 6 do B4 [i]:=Rekey [i+18];i:=1 to 6 do B5 [i]:=Rekey [i+24];i:=1 to 6 do B6 [i]:=Rekey [i+30];i:=1 to 6 do B7 [i]:=Rekey [i+36];i:=1 to 6 do B8 [i]:=Rekey [i+42];:=B1 [1]*2+B1 [6]; n1:=B1 [2]*8+B1 [3]*4+B1 [4]*2+B1 [5];:=B2 [1]*2+B2 [6]; n2:=B2 [2]*8+B2 [3]*4+B2 [4]*2+B2 [5];:=B3 [1]*2+B3 [6]; n3:=B3 [2]*8+B3 [3]*4+B3 [4]*2+B3 [5];:=B4 [1]*2+B4 [6]; n4:=B4 [2]*8+B4 [3]*4+B4 [4]*2+B4 [5];:=B5 [1]*2+B5 [6]; n5:=B5 [2]*8+B5 [3]*4+B5 [4]*2+B5 [5];:=B6 [1]*2+B6 [6]; n6:=B6 [2]*8+B6 [3]*4+B6 [4]*2+B6 [5];:=B7 [1]*2+B7 [6]; n7:=B7 [2]*8+B7 [3]*4+B7 [4]*2+B7 [5];:=B8 [1]*2+B8 [6]; n8:=B8 [2]*8+B8 [3]*4+B8 [4]*2+B8 [5];[1]:=S1 [m1, n1]; RforP[2]:=S2 [m2, n2]; RforP[3]:=S3 [m3, n3]; // преобразование S

RforP[4]:=S4 [m4, n4]; RforP[5]:=S5 [m5, n5]; RforP[6]:=S6 [m6, n6];[7]:=S7 [m7, n7]; RforP[8]:=S8 [m8, n8];:=0; // перевод десятичных значений S в двоичные

For Val:=1 to 8 don:=0; P1:=2*RforP[Val];i:=1 to 4 don:=n+2; P1:=P1 div 2;(RforP[Val]/n)>=0.5 Then PTemp [Val, i]:=P1 mod 2Ptemp [Val, i]:=0; end;i:=1 to 4 doCounter:=Counter+1; P[Counter]:=Ptemp [Val, 5-i]; end;;[1]:=P[16]; RW[2]:=P[7]; RW[3]:=P[20]; RW[4]:=P[21]; RW[5]:=P[29]; // значение функции F (Ri-1, Ki)

RW[6]:=P[12]; RW[7]:=P[28]; RW[8]:=P[17]; RW[9]:=P[1]; RW[10]:=P[15];[11]:=P[23]; RW[12]:=P[26]; RW[13]:=P[5]; RW[14]:=P[18]; RW[15]:=P[31];[16]:=P[10]; RW[17]:=P[2]; RW[18]:=P[8]; RW[19]:=P[24]; RW[20]:=P[14];[21]:=P[32]; RW[22]:=P[27]; RW[23]:=P[3]; RW[24]:=P[9]; RW[25]:=P[19];[26]:=P[13]; RW[27]:=P[30]; RW[28]:=P[6]; RW[29]:=P[22]; RW[30]:=P[11];[31]:=P[4]; RW[32]:=P[25];i:=1 to 32 do L [j, i]:=R [j-1, i];i:=1 to 32 do R [j, i]:=(L [j-1, i]+RW[i]) mod 2; // сложение по модулю 2 Li-1 и F (Ri-1, Ki);;i:=1 to 32 do IPTemp[i]:=R [16, i];i:=1 to 32 do IPTemp [i+32]:=L [16, i];[1]:=IPTemp[40]; IP[2]:=IPTemp[8]; IP[3]:=IPTemp[48]; IP[4]:=IPTemp[16]; // конечная перестановка[5]:=IPTemp[56]; IP[6]:=IPTemp[24]; IP[7]:=IPTemp[64]; IP[8]:=IPTemp[32];[9]:=IPTemp[39]; IP[10]:=IPTemp[7]; IP[11]:=IPTemp[47]; IP[12]:=IPTemp[15];[13]:=IPTemp[55]; IP[14]:=IPTemp[23]; IP[15]:=IPTemp[63]; IP[16]:=IPTemp[31];[17]:=IPTemp[38]; IP[18]:=IPTemp[6]; IP[19]:=IPTemp[46]; IP[20]:=IPTemp[14];[21]:=IPTemp[54]; IP[22]:=IPTemp[22]; IP[23]:=IPTemp[62]; IP[24]:=IPTemp[30];[25]:=IPTemp[37]; IP[26]:=IPTemp[5]; IP[27]:=IPTemp[45]; IP[28]:=IPTemp[13];[29]:=IPTemp[53]; IP[30]:=IPTemp[21]; IP[31]:=IPTemp[61]; IP[32]:=IPTemp[29];[33]:=IPTemp[36]; IP[34]:=IPTemp[4]; IP[35]:=IPTemp[44]; IP[36]:=IPTemp[12];[37]:=IPTemp[52]; IP[38]:=IPTemp[20]; IP[39]:=IPTemp[60]; IP[40]:=IPTemp[28];[41]:=IPTemp[35]; IP[42]:=IPTemp[3]; IP[43]:=IPTemp[43]; IP[44]:=IPTemp[11];[45]:=IPTemp[51]; IP[46]:=IPTemp[19]; IP[47]:=IPTemp[59]; IP[48]:=IPTemp[27];[49]:=IPTemp[34]; IP[50]:=IPTemp[2]; IP[51]:=IPTemp[42]; IP[52]:=IPTemp[10];[53]:=IPTemp[50]; IP[54]:=IPTemp[18]; IP[55]:=IPTemp[58]; IP[56]:=IPTemp[26];[57]:=IPTemp[33]; IP[58]:=IPTemp[1]; IP[59]:=IPTemp[41]; IP[60]:=IPTemp[9];[61]:=IPTemp[49]; IP[62]:=IPTemp[17]; IP[63]:=IPTemp[57]; IP[64]:=IPTemp[25];[1]:=IP[1]*128+IP[2]*64+IP[3]*32+IP[4]*16+IP[5]*8+IP[6]*4+IP[7]*2+IP[8];[2]:=IP[9]*128+IP[10]*64+IP[11]*32+IP[12]*16+IP[13]*8+IP[14]*4+IP[15]*2+IP[16];[3]:=IP[17]*128+IP[18]*64+IP[19]*32+IP[20]*16+IP[21]*8+IP[22]*4+IP[23]*2+IP[24];[4]:=IP[25]*128+IP[26]*64+IP[27]*32+IP[28]*16+IP[29]*8+IP[30]*4+IP[31]*2+IP[32];[5]:=IP[33]*128+IP[34]*64+IP[35]*32+IP[36]*16+IP[37]*8+IP[38]*4+IP[39]*2+IP[40];[6]:=IP[41]*128+IP[42]*64+IP[43]*32+IP[44]*16+IP[45]*8+IP[46]*4+IP[47]*2+IP[48];[7]:=IP[49]*128+IP[50]*64+IP[51]*32+IP[52]*16+IP[53]*8+IP[54]*4+IP[55]*2+IP[56];[8]:=IP[57]*128+IP[58]*64+IP[59]*32+IP[60]*16+IP[61]*8+IP[62]*4+IP[63]*2+IP[64];i:=1 to 8 do Finish[i]:=Chr (W[i]); // выходная последовательность;

[0,0]:=14; S1 [0,1]:=4; S1 [0,2]:=13; S1 [0,3]:=1; S1 [0,4]:=2; S1 [0,5]:=15;[0,6]:=11; S1 [0,7]:=8; S1 [0,8]:=3; S1 [0,9]:=10; S1 [0,10]:=6; S1 [0,11]:=12;[0,12]:=5; S1 [0,13]:=9; S1 [0,14]:=0; S1 [0,15]:=7;[1,0]:=0; S1 [1,1]:=15; S1 [1,2]:=7; S1 [1,3]:=4; S1 [1,4]:=14; S1 [1,5]:=2;[1,6]:=13; S1 [1,7]:=1; S1 [1,8]:=10; S1 [1,9]:=6; S1 [1,10]:=12; S1 [1,11]:=11;[1,12]:=9; S1 [1,13]:=5; S1 [1,14]:=3; S1 [1,15]:=8;[2,0]:=4; S1 [2,1]:=1; S1 [2,2]:=14; S1 [2,3]:=8; S1 [2,4]:=13; S1 [2,5]:=6;[2,6]:=2; S1 [2,7]:=11; S1 [2,8]:=15; S1 [2,9]:=12; S1 [2,10]:=9;[2,11]:=7; S1 [2,12]:=3; S1 [2,13]:=10; S1 [2,14]:=5; S1 [2,15]:=0;[3,0]:=15; S1 [3,1]:=12; S1 [3,2]:=8; S1 [3,3]:=2; S1 [3,4]:=4; S1 [3,5]:=9;[3,6]:=1; S1 [3,7]:=7; S1 [3,8]:=5; S1 [3,9]:=11; S1 [3,10]:=3; S1 [3,11]:=14;[3,12]:=10; S1 [3,13]:=0; S1 [3,14]:=6; S1 [3,15]:=13;[0,0]:=15; S2 [0,1]:=1; S2 [0,2]:=8; S2 [0,3]:=14; S2 [0,4]:=6;[0,5]:=11; S2 [0,6]:=3; S2 [0,7]:=4; S2 [0,8]:=9; S2 [0,9]:=7; S2 [0,10]:=2;[0,11]:=13; S2 [0,12]:=12; S2 [0,13]:=0; S2 [0,14]:=5; S2 [0,15]:=10;[1,0]:=3; S2 [1,1]:=13; S2 [1,2]:=4; S2 [1,3]:=7; S2 [1,4]:=15; S2 [1,5]:=2;[1,6]:=8; S2 [1,7]:=14; S2 [1,8]:=12; S2 [1,9]:=0; S2 [1,10]:=1; S2 [1,11]:=10;[1,12]:=6; S2 [1,13]:=9; S2 [1,14]:=11; S2 [1,15]:=5;[2,0]:=0; S2 [2,1]:=14; S2 [2,2]:=7; S2 [2,3]:=11; S2 [2,4]:=10;[2,5]:=4; S2 [2,6]:=13; S2 [2,7]:=1; S2 [2,8]:=5; S2 [2,9]:=8; S2 [2,10]:=12;[2,11]:=6; S2 [2,12]:=9; S2 [2,13]:=3; S2 [2,14]:=2; S2 [2,15]:=15;[3,0]:=13; S2 [3,1]:=8; S2 [3,2]:=10; S2 [3,3]:=1; S2 [3,4]:=3; S2 [3,5]:=15;[3,6]:=4; S2 [3,7]:=2; S2 [3,8]:=11; S2 [3,9]:=6; S2 [3,10]:=7; S2 [3,11]:=12;[3,12]:=0; S2 [3,13]:=5; S2 [3,14]:=14; S2 [3,15]:=9;[0,0]:=10; S3 [0,1]:=0; S3 [0,2]:=9; S3 [0,3]:=14; S3 [0,4]:=6; S3 [0,5]:=3;[0,6]:=15; S3 [0,7]:=5; S3 [0,8]:=1; S3 [0,9]:=13; S3 [0,10]:=12; S3 [0,11]:=7;[0,12]:=11; S3 [0,13]:=4; S3 [0,14]:=2; S3 [0,15]:=8;

[1,0]:=13; S3 [1,1]:=7; S3 [1,2]:=0; S3 [1,3]:=9; S3 [1,4]:=3; S3 [1,5]:=4;[1,6]:=6; S3 [1,7]:=10; S3 [1,8]:=2; S3 [1,9]:=8; S3 [1,10]:=5; S3 [1,11]:=14;[1,12]:=12; S3 [1,13]:=11; S3 [1,14]:=15; S3 [1,15]:=1;[2,0]:=13; S3 [2,1]:=6; S3 [2,2]:=4; S3 [2,3]:=9; S3 [2,4]:=8; S3 [2,5]:=15;[2,6]:=3; S3 [2,7]:=0; S3 [2,8]:=11; S3 [2,9]:=1; S3 [2,10]:=2; S3 [2,11]:=12;[2,12]:=5; S3 [2,13]:=10; S3 [2,14]:=14; S3 [2,15]:=7;[3,0]:=1; S3 [3,1]:=10; S3 [3,2]:=13; S3 [3,3]:=0; S3 [3,4]:=6; S3 [3,5]:=9;[3,6]:=8; S3 [3,7]:=7; S3 [3,8]:=4; S3 [3,9]:=15; S3 [3,10]:=14; S3 [3,11]:=3;[3,12]:=11; S3 [3,13]:=5; S3 [3,14]:=2; S3 [3,15]:=12;[0,0]:=7; S4 [0,1]:=13; S4 [0,2]:=14; S4 [0,3]:=3; S4 [0,4]:=0; S4 [0,5]:=6;[0,6]:=9; S4 [0,7]:=10; S4 [0,8]:=1; S4 [0,9]:=2; S4 [0,10]:=8; S4 [0,11]:=5;[0,12]:=11; S4 [0,13]:=12; S4 [0,14]:=4; S4 [0,15]:=15;[1,0]:=13; S4 [1,1]:=8; S4 [1,2]:=11; S4 [1,3]:=5; S4 [1,4]:=6; S4 [1,5]:=15;[1,6]:=0; S4 [1,7]:=3; S4 [1,8]:=4; S4 [1,9]:=7; S4 [1,10]:=2; S4 [1,11]:=12;[1,12]:=1; S4 [1,13]:=10; S4 [1,14]:=14; S4 [1,15]:=9;[2,0]:=10; S4 [2,1]:=6; S4 [2,2]:=9; S4 [2,3]:=0; S4 [2,4]:=12; S4 [2,5]:=11;[2,6]:=7; S4 [2,7]:=13; S4 [2,8]:=15; S4 [2,9]:=1; S4 [2,10]:=3; S4 [2,11]:=14;[2,12]:=5; S4 [2,13]:=2; S4 [2,14]:=8; S4 [2,15]:=4;[3,0]:=3; S4 [3,1]:=15; S4 [3,2]:=0; S4 [3,3]:=6; S4 [3,4]:=10; S4 [3,5]:=1;[3,6]:=13; S4 [3,7]:=8; S4 [3,8]:=9; S4 [3,9]:=4; S4 [3,10]:=5; S4 [3,11]:=11;[3,12]:=12; S4 [3,13]:=7; S4 [3,14]:=2; S4 [3,15]:=14;[0,0]:=2; S5 [0,1]:=12; S5 [0,2]:=4; S5 [0,3]:=1; S5 [0,4]:=7; S5 [0,5]:=10;[0,6]:=11; S5 [0,7]:=6; S5 [0,8]:=8; S5 [0,9]:=5; S5 [0,10]:=3; S5 [0,11]:=15;[0,12]:=13; S5 [0,13]:=0; S5 [0,14]:=14; S5 [0,15]:=9;[1,0]:=14; S5 [1,1]:=11; S5 [1,2]:=2; S5 [1,3]:=12; S5 [1,4]:=4; S5 [1,5]:=7;[1,6]:=13; S5 [1,7]:=1; S5 [1,8]:=5; S5 [1,9]:=0; S5 [1,10]:=15; S5 [1,11]:=10;[1,12]:=3; S5 [1,13]:=9; S5 [1,14]:=8; S5 [1,15]:=6;[2,0]:=4; S5 [2,1]:=2; S5 [2,2]:=1; S5 [2,3]:=11; S5 [2,4]:=10; S5 [2,5]:=13;[2,6]:=7; S5 [2,7]:=8; S5 [2,8]:=15; S5 [2,9]:=9; S5 [2,10]:=12; S5 [2,11]:=5;[2,12]:=6; S5 [2,13]:=3; S5 [2,14]:=0; S5 [2,15]:=14;[3,0]:=11; S5 [3,1]:=8; S5 [3,2]:=12; S5 [3,3]:=7; S5 [3,4]:=1; S5 [3,5]:=14;[3,6]:=2; S5 [3,7]:=13; S5 [3,8]:=6; S5 [3,9]:=15; S5 [3,10]:=0; S5 [3,11]:=9;[3,12]:=10; S5 [3,13]:=4; S5 [3,14]:=5; S5 [3,15]:=3;[0,0]:=12; S6 [0,1]:=1; S6 [0,2]:=10; S6 [0,3]:=15; S6 [0,4]:=9; S6 [0,5]:=2;[0,6]:=6; S6 [0,7]:=8; S6 [0,8]:=0; S6 [0,9]:=13; S6 [0,10]:=3; S6 [0,11]:=4;[0,12]:=14; S6 [0,13]:=7; S6 [0,14]:=5; S6 [0,15]:=11;[1,0]:=10; S6 [1,1]:=15; S6 [1,2]:=4; S6 [1,3]:=2; S6 [1,4]:=7; S6 [1,5]:=12;[1,6]:=9; S6 [1,7]:=5; S6 [1,8]:=6; S6 [1,9]:=1; S6 [1,10]:=13; S6 [1,11]:=14;[1,12]:=0; S6 [1,13]:=11; S6 [1,14]:=3; S6 [1,15]:=8;[2,0]:=9; S6 [2,1]:=14; S6 [2,2]:=15; S6 [2,3]:=5; S6 [2,4]:=2; S6 [2,5]:=8;[2,6]:=12; S6 [2,7]:=3; S6 [2,8]:=7; S6 [2,9]:=0; S6 [2,10]:=4; S6 [2,11]:=10;[2,12]:=1; S6 [2,13]:=13; S6 [2,14]:=11; S6 [2,15]:=6;[3,0]:=4; S6 [3,1]:=3; S6 [3,2]:=2; S6 [3,3]:=12; S6 [3,4]:=9; S6 [3,5]:=5;[3,6]:=15; S6 [3,7]:=10; S6 [3,8]:=11; S6 [3,9]:=14; S6 [3,10]:=1; S6 [3,11]:=7;[3,12]:=6; S6 [3,13]:=0; S6 [3,14]:=8; S6 [3,15]:=13;[0,0]:=4; S7 [0,1]:=11; S7 [0,2]:=2; S7 [0,3]:=14; S7 [0,4]:=15; S7 [0,5]:=0;[0,6]:=8; S7 [0,7]:=13; S7 [0,8]:=3; S7 [0,9]:=12; S7 [0,10]:=9; S7 [0,11]:=7;[0,12]:=5; S7 [0,13]:=10; S7 [0,14]:=6; S7 [0,15]:=1;[1,0]:=13; S7 [1,1]:=0; S7 [1,2]:=11; S7 [1,3]:=7; S7 [1,4]:=4; S7 [1,5]:=9;[1,6]:=1; S7 [1,7]:=10; S7 [1,8]:=14; S7 [1,9]:=3; S7 [1,10]:=5; S7 [1,11]:=12;[1,12]:=2; S7 [1,13]:=15; S7 [1,14]:=8; S7 [1,15]:=6;[2,0]:=1; S7 [2,1]:=4; S7 [2,2]:=11; S7 [2,3]:=13; S7 [2,4]:=12; S7 [2,5]:=3;[2,6]:=7; S7 [2,7]:=14; S7 [2,8]:=10; S7 [2,9]:=15; S7 [2,10]:=6; S7 [2,11]:=8;[2,12]:=0; S7 [2,13]:=5; S7 [2,14]:=9; S7 [2,15]:=2;[3,0]:=6; S7 [3,1]:=11; S7 [3,2]:=13; S7 [3,3]:=8; S7 [3,4]:=1; S7 [3,5]:=4;[3,6]:=10; S7 [3,7]:=7; S7 [3,8]:=9; S7 [3,9]:=5; S7 [3,10]:=0; S7 [3,11]:=15;[3,12]:=14; S7 [3,13]:=2; S7 [3,14]:=3; S7 [3,15]:=12;[0,0]:=13; S8 [0,1]:=2; S8 [0,2]:=8; S8 [0,3]:=4; S8 [0,4]:=6; S8 [0,5]:=15;[0,6]:=11; S8 [0,7]:=1; S8 [0,8]:=10; S8 [0,9]:=9; S8 [0,10]:=3; S8 [0,11]:=14;[0,12]:=5; S8 [0,13]:=0; S8 [0,14]:=12; S8 [0,15]:=7;[1,0]:=1; S8 [1,1]:=15; S8 [1,2]:=13; S8 [1,3]:=8; S8 [1,4]:=10; S8 [1,5]:=3;[1,6]:=7; S8 [1,7]:=4; S8 [1,8]:=12; S8 [1,9]:=5; S8 [1,10]:=6; S8 [1,11]:=11;[1,12]:=0; S8 [1,13]:=14; S8 [1,14]:=9; S8 [1,15]:=2;[2,0]:=7; S8 [2,1]:=11; S8 [2,2]:=4; S8 [2,3]:=1; S8 [2,4]:=9; S8 [2,5]:=12;[2,6]:=14; S8 [2,7]:=2; S8 [2,8]:=0; S8 [2,9]:=6; S8 [2,10]:=10; S8 [2,11]:=13;[2,12]:=15; S8 [2,13]:=3; S8 [2,14]:=5; S8 [2,15]:=8;[3,0]:=2; S8 [3,1]:=1; S8 [3,2]:=14; S8 [3,3]:=7; S8 [3,4]:=4; S8 [3,5]:=10;[3,6]:=8; S8 [3,7]:=13; S8 [3,8]:=15; S8 [3,9]:=12; S8 [3,10]:=9; S8 [3,11]:=0;[3,12]:=3; S8 [3,13]:=5; S8 [3,14]:=6; S8 [3,15]:=11;; // процедура очищающая экран (входит в стандартный модуль Crt)

Assign (Out, 'Result.txt');(Out); Writeln; ('Для того чтобы зашифровать / расшифровать файл нажмите 1'); Writeln;

Write (' Для того чтобы зашифровать / расшифровать сообщение нажмите 2'); Writeln;

Control:=ReadKey;Control of

'1': Goto Cntr1;

'2': Goto Cntr2;;: Write ('Введите путь к файлу:'); Read(Way);(F, Way); Reset(F); Goto VVod;: Write ('Введите сообщение:'); Read(So);(F, 'Temp.txt'); Rewrite(F); z:=Length(so);u:=1 to z do Write (f, So[u]); Close(f);(f); Goto VVod;: Write ('Введите ключ (8 символов):'); For u:=1 to 10 do read (Key[u]); ('Для зашифрования нажмите 1'); Writeln;

Write (' Для расшифрования нажмите 2'); WriteLn;

'1': Goto StartC;

'2': Goto StartU;

end;

Label1: For u:=1 to 8 do // цикл, который разбивает входящие данные на блоки по восемь // символов, а затем выполняет их зашифрование, а также запись в файл.

begin A:=Finish[u]; Write (Out, A); end;:y:=1;not (Eof(F)) doy:=1 to 8 do begin(F, s); Text[y]:=s; end;; Goto Label1;;u:=y to 8 do Text[u]:=' ';:=k2+2; If k2>1 then Goto all;2: For u:=1 to 8 do // цикл, который разбивает входящие данные на блоки по восемь // символов, а затем выполняет их расшифрование, а также запись в файл.

begin A:=Finish[u]; Write (Out, A); end;: y:=1;not (Eof(F)) doy:=1 to 8 do begin(F, s); Text[y]:=s; end;; Goto Label2;;u:=y to 8 do Text[u]:=' ';:=k2+2; If k2>1 then Goto all;:close(f); Close(Out);Control='2' then erase(f);; Write ('Результат сохранен в файл Result.txt.'); Writeln;

END.

Похожие работы на - Алгоритм шифрования DES, Triple DES

 

Не нашли материал для своей работы?
Поможем написать уникальную работу
Без плагиата!