Программная реализация алгоритма шифровании DES (режим ЕСВ)
Выбор инструментов разработки алгоритма шифровании DES. Описание структуры программы, процедур и функций. Разработка алгоритма симметрического шифрования в java. Описание назначения и условий применения программы. Составление руководства пользователя.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | русский |
Дата добавления | 18.11.2017 |
Размер файла | 131,2 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
Содержание
Введение
1. Постановка задачи
1.1 Описание предметной области
1.2 Обзор существующих решений
1.3 Входные и входные данные
2. Проектирование задачи
2.1 Диаграмма вариантов использования
2.2 Разработка алгоритма работы программы
2.3 Разработка алгоритмов решения задачи
3. Программная реализация
3.1 Выбор и обоснование инструментов разработки
3.2 Структура программы
3.3 Описание разработанных процедур и функций
4. Применение программы
4.1 Назначение и условие применения программы
4.2 Руководство пользователя
Заключение
Список использованной литературы
Приложения
Введение
Стандарт шифрования данных DES опубликован в 1977 г. Национальным бюро стандартом США.
Стандарт DES предназначен для защиты от несанкционированного доступа к важной, но несекретной информации в государственных и коммерческих организациях США. Алгоритм, положенный в основу стандарта, распространялся достаточно быстро, и уже в 1980 г. Был одобрен Национальным институтом стандартов и технологий США. С этого момента DES превращается в стандарт не только по названию, но и фактически. Появляются программное обеспечение и специализированные микро ЭВМ, предназначенные для шифрования и расшифрования информации в сетях передачи данных.
Симметричные криптосистемы (также симметричное шифрование, симметричные шифры) -- способ шифрования, в котором для (за)шифрования и расшифровывания применяется один и тот же криптографический ключ. До изобретения схемы асимметричного шифрования единственным существовавшим способом являлось симметричное шифрование. Ключ алгоритма должен сохраняться в секрете обеими сторонами. Ключ алгоритма выбирается сторонами до начала обмена сообщениями.
Алгоритмы шифрования и дешифрования данных широко применяются в компьютерной технике в системах сокрытия конфиденциальной и коммерческой информации от злонамеренного использования сторонними лицами. Главным принципом в них является условие, что передатчик и приемник заранее знают алгоритм шифрования, а также ключ к сообщению, без которых информация представляет собой всего лишь набор символов, не имеющих смысла.
Классическим примером таких алгоритмов являются симметричные криптографические алгоритмы, перечисленные ниже:
- простая подстановка;
- одиночная перестановка по ключу;
- двойная перестановка;
- перестановка "Магический квадрат";
- простая перестановка.
Полная утрата всех статистических закономерностей исходного сообщения является важным требованием к симметричному шифру. Для этого шифр должен иметь «эффект лавины» -- должно происходить сильное изменение шифроблока при 1битном изменении входных данных (в идеале должны меняться значения 1/2 бит шифроблока).
Также важным требованием является отсутствие линейности (то есть условия
а(ф) чщк а(и) = а(ф чщк и))б
в противном случае облегчается применение дифференциального криптоанализа к шифру.
В настоящее время симметричные шифры -- это блочные шифры. Обрабатывают информацию блоками определённой длины (обычно 64, 128 бит), применяя к блоку ключ в установленном порядке, как правило, несколькими циклами перемешивания и подстановки, называемыми раундами. Результатом повторения раундов является лавинный эффект -- нарастающая потеря соответствия битов между блоками открытых и зашифрованных данных.
- поточные шифры, в которых шифрование проводится над каждым битом либо байтом исходного (открытого) текста с использованием гаммирования. Поточный шифр может быть легко создан на основе блочного (например, ГОСТ 28147-89 в режиме гаммирования), запущенного в специальном режиме.
Существует множество (не менее двух десятков) алгоритмов симметричных шифров, существенными параметрами которых являются:
- стойкость;
- длина ключа;
- число раундов;
- длина обрабатываемого блока;
- сложность аппаратной/программной реализации;
- сложность преобразования.
В данном курсовом проекте предлагается программная реализация алгоритма шифровании DES(режим ЕСВ).
1. Постановка задачи
1.1 Описание предметной области
В связи с явной сетевой направленностью языка Java потребовалось уделить должное внимание средствам защиты. В первую очередь это касается пересылки важных данных между, например, клиентом и сервером, а также запуска программ или апплетов. Такие средства были разработаны и встроены в набор стандартных библиотек (JDK security API).
Примером необходимости защиты может служить желание пользователя-получателя иметь возможность верификации, что дает определенные гарантии подлинности документа или кода. В качестве подписываемого объекта могут выступать апплеты, которые широко распространены в Интернете. В результате у получателя появляется уверенность, что информация получена именно от ожидаемого отправителя, а не возможного злоумышленника, и не была изменена в процессе пересылки. Для обеспечения такого рода безопасности служат цифровые подписи и сертификаты.
Симметрическое шифрование - способ шифрования, в котором для (за)шифрования и расшифрования применяется один и тот же криптографический ключ.
В данной курсовой работе мы рассмотрим реализацию алгоритма симметрического шифрования в java на примере алгоритма DES. И создание, и проверку цифровой подписи алгоритмом DSA.
1.2 Обзор существующих решений
Существует только одно решение данной задачи с помощью сетей Фейстеля. Сеть Фейстеля -- это общий метод преобразования произвольной функции F в перестановку на множестве блоков. Она состоит из циклически повторяющихся ячеек -- раундов. Внутри каждого раунда блок открытого текста разделяется на две равные части. Раундовая функция берет одну половину (на рис. правую), преобразует её с использованием ключа Ki и объединяет результат с второй половиной посредством операции исключающее ИЛИ (XOR). Этот ключ задаётся первоначальным ключом K и различен для каждого раунда. Далее половинки меняются местами и подаются на следующий раунд.
1.3 Входные и входные данные
При запуске программы пользователь имеет возможность ввести свой текс, который ему нужно зашифровать, а также пароль, чтобы другой человек с помощью шифровки и пароля смог узнать, что было зашифровано.
2. Проектирование задачи
2.1 Диаграмма вариантов использования
Диаграмма вариантов использования - это диаграмма, на которой изображаются отношения между актерами и вариантами использования.
Диаграмма вариантов использования - это исходное концептуальное представление или концептуальная модель системы в процессе ее проектирования и разработки. Создание диаграммы вариантов использования имеет следующие цели:
- Определить общие границы и контекст моделируемой предметной области на начальных этапах проектирования системы;
- Сформулировать общие требования к функциональному поведению проектируемой системы;
- Разработать исходную концептуальную модель системы для ее последующей детализации в форме логических и физических моделей;
- Подготовить сходную документацию для взаимодействия разработчиков системы с ее заказчиками и пользователями.
В данном случае варианты использования - это те действия, которые пользователь
может осуществлять по отношению к данному продукту (смотрите рисунок 2.1).
Диаграмма 2.1 - Варианты использования программы
2.2 Разработка алгоритма работы программы
Для реализации рекурсивного алгоритма «Шифр DES» необходимо решить следующие задачи:
- разработать рациональный алгоритм для эффективной работы программы;
- изучить теоретический материал по данной теме;
- разработать красивый, а главное - удобный интерфейс программы;
- раскрыть полностью свой творческий и профессиональный потенциал.
2.3 Разработка алгоритмов решения задачи
Для того, чтобы разработать эффективный алгоритм решения задачи, необходимо разобраться как решается эта задача.
DES осуществляет шифрование 64-битовых блоков данных с помощью 56-битового ключа. Расшифрование в DES является операцией обратной шифрованию и выполняется путем повторения операций шифрования в обратной последовательности (несмотря на кажущуюся очевидность, так делается далеко не всегда. Позже мы рассмотрим шифры, в которых шифрование и расшифрование осуществляются по разным алгоритмам).
Процесс шифрования каждого 64-битового блока исходных данных можно разделить на три этапа:
· начальная подготовка блока данных;
· 16 раундов "основного цикла";
· конечная обработка блока данных.
На первом этапе выполняется начальная перестановка 64-битного исходного блока текста, во время которой биты определенным образом переупорядочиваются.
На следующем (основном) этапе блок делится на две части (ветви) по 32 бита каждая. Правая ветвь преобразуется с использованием некоторой функции F и соответствующего частичного ключа, получаемого из основного ключа шифрования по специальному алгоритму преобразования ключей. Затем производится обмен данными между левой и правой ветвями блока. Это повторяется в цикле 16 раз.
Наконец, на третьем этапе выполняется перестановка результата, полученного после шестнадцати шагов основного цикла. Эта перестановка обратна начальной перестановке.
3. Программная реализация
3.1 Выбор и обоснование инструментов разработки
Для того, чтобы начать работу, необходимо выбрать для этого подходящую среду, ведь от неё тоже будет зависеть качество продукта, в данном случае - курсового проекта. Среда в компьютере - программные средства, которые представляют собой совокупность программ, которые имеют определенное назначение и предназначены для работы на персональном компьютере.
Программным средством для разработки любой программы является операционная система, среда разработки программы, язык программирования, предназначенный для данной среды разработки программы. При выполнении данного проекта были использованы следующие программные средства:
операционная система Windows 10;
визуальная среда разработки программ Borland Delphi 7.0 Lite Edition;
текстовый редактор Microsoft Word.
Для работы была выбрана операционная система Windows 10. Среди прочих причин использования операционной системы Windows стоит отметить наличие большого выбора хорошего бесплатного программного обеспечения под нее. Одним из таких примеров может служить текстовый процессор Microsoft Word, который использовался мной для написания пояснительной записки и чтения различных материалов, которые помогали мне при написании курсового проекта. Word предоставляет возможность быстро и качественно обрабатывать текстовую и графическую информацию, предоставляет средства для работы с таблицами. Данное программное обеспечение помогло оформить пояснительную записку, особенно инструмент стили форматирования. Благодаря нему параметры задаются один раз и больше не требуется постоянное форматирование текста под ГОСТ.
Для написания данной программы выбрана среда разработки Borland Delphi 7 Lite Edition под операционную систему Microsoft Windows-среды.
Преимущества языка программирования Delphi:
удобный интерфейс программного обеспечения;
низкие программные требования приложения;
возможность создания своего собственного и неповторимого интерфейса программы;
удобная система отладки программы (возможность пошагового просмотра выполнения программы) .
3.2 Структура программы
При создании форм приложения был использован класс - TForm.
На формах располагаются следующие компоненты:
TButton;
TLabel;
TEdit
Button используется для реализации в программе команд с помощью обработчика события OnClick этого компонента. Один и тот же обработчик может обрабатывать события нескольких компонентов TButton (да и не только TButton, но и даже компонентов других типов). Для определения того, событие какого именно компонента нужно обрабатывать, используется встроенная переменная Sender типа TObject, обозначающая объект, вызвавший данное событие.
Delphi компонент Label предназначен для отображения статического текста, то есть надписей и меток на форме, которые не меняются в течение всего времени работы программы. Конечно, текст надписи, отображаемый компонентом Label можно изменить, но не непосредственно, а только программно. Свойством компонента Label, которое используется для задания отображаемого текста, является Caption.
Компонент Delphi Edit представляет собой однострочное текстовое поле, служащее для ввода данных пользователем. Основным свойством компонента Delphi Edit, передающим введённую информацию, является свойство Edit1.Text типа String. При изучении работы с Delphi Edit советую посетить страничку работа со строками Delphi, так как там описываются функции Delphi для работы с данными, представленными в текстовой форме.
3.3 Описание разработанных процедур и функций
Рассмотрим раздел «Оптимальное решение», который включает в себя следующие процедуры:
Function ConToBin выполняет преобразование в бинарный вид.
Function ConToInt выполняет преобразование в числовой вид.
Function MakePerest1, Function MakePerest2 выполняют начальную и конечную перестановку соответственно.
Function GetHighPart, Function GetLowPart выполняют получение первых и последних 32 бит соответственно.
Function MakeXOR операция исключающая ИЛИ.
Function ShiftLeft - функция сдвига битов
Рrocedure MakeSubKeys - процедура для использования подключей.
Function StrToBin, Function BinToStr - фукнция для преобразования текста в бинарный вид, и из бинарного в текстовый.
Function CodeDES- функция реализующая сам алгоритм.
procedure TForm1.cmdCodeClick(Sender: TObject);- кнопка для реализации шифрования.
Код программы представлен в приложении Б.
4. Применение программы
4.1 Назначение и условие применения программы
Данная программа представляет собой реализацию алгоритма «Шифр DES».
Цель программы: ознакомить пользователя с алгоритмом шифрования.
Данный шифр очень прост в управлении. Как пользоваться данной программой разберётся каждый пользователь. Данная программа представляет собой реализацию шифра DES, который служит для шифрования данных.
4.2 Руководство пользователя
При запуске программы пользователь может ознакомиться с понятием по данному шифру, выбрав в меню раздел «DES -это ». Чтобы вернуться в главное меню необходимо воспользоваться кнопкой «ОК».
Пользоваться данной программой очень легко. На форме расположены все компоненты для работы. Чтобы зашифровать текст для начала нужно ввести пароль в специальную форму, а также и текст, далее нажать кнопку «Шифровать». В итоге получиться зашифрованный текст. Для расшифровки проводятся те же действия. Главный момент в расшифровки текста то, что пароль при шифровке и расшифровки должен быть одинаковый. Если пароль совпадать не будет, расшифровать текст не получится.
Наглядный пример программы представлен на рисунках 4.2.1, 4.2.2, 4.2.3. алгоритм шифрование программа java
На рисунке 4.2.1 представлена форма программы с помощью которой реализуется шифр.
На рисунке 4.2.2 даётся определения, что такое шифр DES.
На рисунке 4.2.3 представлен пример шифрования.
Рис. 4.2.1
Рис. 4.2.2
Рис. 4.2.3
Заключение
Цель данного курсового проекта - реализация алгоритма шифрования DES на языке Delphi.
Передо мной стояли следующие задачи:
- разработать рациональный алгоритм для эффективной работы программы;
- изучить теоретический материал по данной теме;
- разработать удобный интерфейс программы;
- раскрыть полностью свой творческий и профессиональный потенциал.
В первом разделе «Постановка задачи» я описал предметную область, так же были перечислены существующие решения данной задачи и входные/выходные данные. Описание алгоритмов работы программы и алгоритмов решения задачи, также диаграмма вариантов использования данного программного средства представлена в разделе «Проектирование задачи». Выбор и обоснование инструментов разработки программы, ее структура и все разработанные процедуры и функции были представлены в разделе «Программная реализация». В заключительном, четвертом разделе «Применение программы» было перечислено назначение и условие применения программы, руководство по использованию каждой функции приложения.
Учитывая то, что мне удалось реализовать данную программу, этот язык обладает огромным потенциалом, который мне не удалось использовать полностью, но в этом есть свои плюсы.
С помощью данного курсового проекта мне удалось развить и получить новые навыки работы с языком Delphi. Этим польза проекта не ограничилась, эта работа помогла мне самостоятельно проанализировать ход работы и разбить её на подзадачи, которые необходимо было реализовывать. Это может пригодиться не только при написании подобных работ, но и в обычной жизни для анализа различных ситуаций.
В результате проделанной работы мне удалось реализовать поставленную задачу.
Список использованной литературы
1. Ященко В.В., Справочное пособие: Введение в криптографию, 2016 г. --235 с: ил.;
2. Харин Ю.С., Берник В.И., Матаеев Г.В., Математические основы криптологии, Минск, 1999. - 309 с., ил;
3. Алферов А.П., Основы криптографии, 2002. - 469 с.: цв. ил.;
4. Культин Н.Б. Delphi в задачах и примерах. - СПб.:БХВ-Петербург, 2003. - 288 с.: ил.
Приложение А
Приложение Б
Код программы
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Math, StdCtrls, Menus;
type
TForm1 = class(TForm)
Label1: TLabel;
Label2: TLabel;
txtKey: TEdit;
cmdCode: TButton;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
Edit1: TEdit;
Button1: TButton;
Label6: TLabel;
InText: TEdit;
OutText: TEdit;
Memo1: TEdit;
Memo2: TEdit;
MainMenu1: TMainMenu;
N1: TMenuItem;
N2: TMenuItem;
N3: TMenuItem;
N4: TMenuItem;
procedure cmdCodeClick(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure N2Click(Sender: TObject);
procedure N3Click(Sender: TObject);
procedure N4Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
K:array [1..16] of string;
const
//матрица начальной перестановки IP
IP1:array [1..64] of integer=(58,50,42,34,26,18,10,2,60,52,44,36,28,20,12,4,
62,54,46,38,30,22,14,6,64,56,48,40,32,24,16,8,
57,49,41,33,25,17,9,1,59,51,43,35,27,19,11,3,
61,53,45,37,29,21,13,5,63,55,47,39,31,23,15,7);
//Матрица конечной перестановки
IP2:array [1..64] of integer=(40,8,48,16,56,24,64,32,39,7,47,15,55,23,63,31,
38,6,46,14,54,22,62,30,37,5,45,13,53,21,61,29,
36,4,44,12,52,20,60,28,35,3,43,11,51,19,59,27,
34,2,42,10,50,18,58,26,33,1,41,9,49,17,57,25);
//Перестановка с расширением
E:array [1..48] of integer=( 32,1,2,3,4,5,
4,5,6,7,8,9,
8,9,10,11,12,13,
12,13,14,15,16,17,
16,17,18,19,20,21,
20,21,22,23,24,25,
24,25,26,27,28,29,
28,29,30,31,32,1);
//Перестановка с помощью P-блоков
P:array [1..32] of integer=(16,7,20,21,29,12,28,17,
1,15,23,26,5,18,31,10,
2,8,24,14,32,27,3,9,
19,13,30,6,22,11,4,25);
//Перестановка с помощью S-блоков
S:array [1..8,0..63] of integer=(
(14,0,4,15,13,7,1,4,2,14,15,2,11,13,8,1,
3,10,10,6,6,12,12,11,5,9,9,5,0,3,7,8,
4,15,1,12,14,8,8,2,13,4,6,9,2,1,11,7,
15,5,12,11,9,3,7,14,3,10,10,0,5,6,0,13),
(15,3,1,13,8,4,14,7,6,15,11,2,3,8,4,14,
9,12,7,0,2,1,13,10,12,6,0,9,5,11,10,5,
0,13,14,8,7,10,11,1,10,3,4,15,13,4,1,2,
5,11,8,6,12,7,6,12,9,0,3,5,2,14,15,9),
(10,13,0,7,9,0,14,9,6,3,3,4,15,6,5,10,
1,2,13,8,12,5,7,14,11,12,4,11,2,15,8,1,
13,1,6,10,4,13,9,0,8,6,15,9,3,8,0,7,
11,4,1,15,2,14,12,3,5,11,10,5,14,2,7,12),
(7,13,13,8,14,11,3,5,0,6,6,15,9,0,10,3,
1,4,2,7,8,2,5,12,11,1,12,10,4,14,15,9,
10,3,6,15,9,0,0,6,12,10,11,1,7,13,13,8,
15,9,1,4,3,5,14,11,5,12,2,7,8,2,4,14),
(2,14,12,11,4,2,1,12,7,4,10,7,11,13,6,1,
8,5,5,0,3,15,15,10,13,3,0,9,14,8,9,8,
4,11,2,8,1,12,11,7,10,1,13,14,7,2,8,13,
15,6,9,15,12,0,5,9,6,10,3,4,0,5,14,3),
(12,10,1,15,10,4,15,2,9,7,2,12,6,9,8,5,
0,6,13,1,3,13,4,14,14,0,7,11,5,3,11,8,
9,4,14,3,15,2,5,12,2,9,8,5,12,15,3,10,
7,11,0,14,4,1,10,7,1,6,13,0,11,8,6,13),
(4,13,11,0,2,11,14,7,15,4,0,9,8,1,13,10,
3,14,12,3,9,5,7,12,5,2,10,15,6,8,1,6,
1,6,4,11,11,13,13,8,12,1,3,4,7,10,14,7,
10,9,15,5,6,0,8,15,0,14,5,2,9,3,2,12),
(13,1,2,15,8,13,4,8,6,10,15,3,11,7,1,4,
10,12,9,5,3,5,14,11,5,0,0,14,12,9,7,2,
7,2,11,1,4,14,1,7,9,4,12,10,14,8,2,13,
0,15,6,12,10,9,13,0,15,3,3,5,5,6,8,11));
//C0-блок перестановки ключа
C0:array [1..28] of integer=(57,49,41,33,25,17,9,
1,58,50,42,34,26,18,
10,2,59,51,43,35,27,
19,11,3,60,52,44,36);
//D0-блок перестановки ключа
D0:array [1..28] of integer=(63,55,47,39,31,23,15,
7,62,54,46,38,30,22,
14,6,61,53,45,37,29,
21,13,5,28,20,12,4);
//циклический сдвиг ключа в зависимости от этапа
R:array [1..16] of integer=(1,1,2,2,2,2,2,2,1,2,2,2,2,2,2,1);
//перестановка со сжатием
PC2:array [1..48] of integer=(14,17,11,24,1,5,
3,28,15,6,21,10,
23,19,12,4,26,8,
16,7,27,20,13,2,
41,22,31,37,47,55,
30,40,51,45,33,48,
44,49,39,56,34,53,
46,42,50,36,29,32);
implementation
{$R *.dfm}
//Преобразование в бинарный вид
function ConToBin(Num:Byte; l:integer):string;
var
h:string;
t:string;
i:integer;
begin
h:=inttohex(Num,l); //Переводитт число из десятеричной системы в шестнадцатиричную
t:='';
for i:=1 to Length(h) do
begin
case h[i] of //последовательность условных операторов
'0': t:=t+'0000';//16 система счисления
'1': t:=t+'0001';//16 система счисления
'2': t:=t+'0010'; //16 система счисления
'3': t:=t+'0011';//16 система счисления
'4': t:=t+'0100'; //16 система счисления
'5': t:=t+'0101';//16 система счисления
'6': t:=t+'0110';//16 система счисления
'7': t:=t+'0111'; //16 система счисления
'8': t:=t+'1000'; //16 система счисления
'9': t:=t+'1001'; //16 система счисления
'A': t:=t+'1010'; //16 система счисления
'B': t:=t+'1011'; //16 система счисления
'C': t:=t+'1100'; //16 система счисления
'D': t:=t+'1101';//16 система счисления
'E': t:=t+'1110';//16 система счисления
'F': t:=t+'1111';//16 система счисления
end;
end;
ConToBin:=t;
end;
//Преобразование в числовой вид
function ConToInt(str:string):integer;
var
i:integer;
t:integer;
begin
t:=0;
for i:=1 to Length(str) do
t:=t+strtoint(Copy(str,i,1))*round(power(2,Length(str)-i));
ConToInt:=t;
end;
//Начальная перестановка
function MakePerest1(block:string):string;
var
t:string;
i:integer;
begin
t:=StringOfChar('0',64);
for i:=1 to 64 do t[i]:=block[IP1[i]];
MakePerest1:=t;
end;
//Конечная перестановка
function MakePerest2(block:string):string;
var
t:string;
i:integer;
begin
t:=StringOfChar('0',64);
for i:=1 to 64 do t[i]:=block[IP2[i]];
MakePerest2:=t;
end;
//Получить первые 32 бита
function GetHighPart(block:string):string;
begin
GetHighPart:=Copy(block,1,32);
end;
//Получить последние 32 бита
function GetLowPart(block:string):string;
begin
GetLowPart:=Copy(block,33,32);
end;
//Операция исключающая ИЛИ
function MakeXOR(blk1,blk2:string; l:integer):string;
var
i:integer;
t:string;
begin
t:=StringOfChar('0',l);
for i:=1 to l do
if ((blk1[i]='0') and (blk2[i]='1')) or ((blk1[i]='1') and (blk2[i]='0')) then t[i]:='1' else t[i]:='0';
MakeXOR:=t;
end;
//Фунция сдвига битов
function ShiftLeft(blk:string; n:integer):string;
begin
ShiftLeft:=Copy(blk,n+1,Length(blk)-n)+StringOfChar('0',n);
end;
//подключи
procedure MakeSubKeys(Key:string);
var
i:integer;
Hi:string;
Lo:string;
OHi:string;
OLo:string;
t:string;
j:integer;
begin
Hi:=StringOfChar('0',28); //строка длинной 28, заполненная нулями
Lo:=StringOfChar('0',28); //строка длинной 28, заполненная нулями
OHi:=StringOfChar('0',28); //строка длинной 28, заполненная нулями
OLo:=StringOfChar('0',28); //строка длинной 28, заполненная нулями
for i:=1 to 16 do k[i]:=StringOfChar('0',48);
for i:=1 to 28 do
begin
OHi[i]:=Key[C0[i]];
OLo[i]:=Key[D0[i]];
end;
for i:=1 to 16 do
begin
Hi:=ShiftLeft(OHi,R[i]);
Lo:=ShiftLeft(OLo,R[i]);
t:=Hi+Lo;
for j:=1 to 48 do k[i][j]:=t[PC2[j]];
OHi:=Hi;
OLo:=Lo;
end;
end;
function F(X,SK:string):string;
var
T:string;
i:integer;
H:string;
XS:string;
begin
T:=StringOfChar('0',48);
for i:=1 to 48 do T[i]:=X[E[i]];
H:=MakeXOR(T,SK,48);
T:='';
for i:=1 to 8 do
T:=T+ConToBin(S[i,ConToInt(Copy(H,8*(i-1)+1,8))],1);
XS:=StringOfChar('0',32);
for i:=1 to 32 do XS[i]:=T[P[i]];
F:=XS;
end;
//Преобразование текста в бинарный вид
function StrToBin(str:string):string;
var
t:string;
i:integer;
begin
t:='';
for i:=1 to Length(str) do
begin
t:=t+ConToBin(ord(str[i]),2);
end;
StrToBin:=t;
end;
//Преобразование из бинарного вида в текстовый
function BinToStr(bin:string):string;
var
i:integer;
t:string;
begin
t:=StringOfChar('0',Length(bin) div 8);
for i:=1 to Length(bin) div 8 do
begin
t[i]:=chr(ConToInt(Copy(bin,8*(i-1)+1,8)));
end;
BinToStr:=t;
end;
//Собственно основа алгоритма
function CodeDES(Str,Key:string):string;
var
i:integer;
T:string;
TZ:string;
H,L:string;
OH,OL:string;
BinKey:string;
begin
T:=StrToBin(Str);
BinKey:=StrToBin(Key); //преобразовали ключ в бинарный вид
TZ:=StringOfChar('0',64);
for i:=1 to 64 do TZ[i]:=T[IP1[i]];
H:=GetHighPart(TZ);
L:=GetLowPart(TZ);
MakeSubKeys(BinKey); //Разбили ключ на подключи
for i:=1 to 16 do
begin
OH:=H;
OL:=L;
L:=MakeXOR(OH,F(OL,k[i]),32);
H:=OL;
end;
T:=MakePerest2(L+H);
CodeDES:=BinToStr(T);
end;
//Дешифрование
function DEcodeDES(Str,Key:string):string;
var
i:integer;
T:string;
TZ:string;
H,L:string;
OH,OL:string;
BinKey:string;
begin
T:=StrToBin(Str);
BinKey:=StrToBin(Key);
TZ:=StringOfChar('0',64);
for i:=1 to 64 do TZ[i]:=T[IP1[i]];
H:=GetHighPart(TZ);
L:=GetLowPart(TZ);
MakeSubKeys(BinKey);
for i:=1 to 16 do
begin
OH:=H;
OL:=L;
L:=MakeXOR(OH,F(OL,k[17-i]),32);
H:=OL;
end;
T:=MakePerest2(L+H);
DecodeDES:=BinToStr(T);
end;
//Шифрование
procedure TForm1.cmdCodeClick(Sender: TObject);
var
i:integer;
begin
if (Length(InText.Text)=1) or (Length(InText.Text)=2) then
begin
OutText.Text:=CodeDES(InText.Text+StringOfChar(' ',8-Length(InText.Text)),txtKey.Text);
exit;
end;
if Length(InText.Text) mod 8<>0 then InText.Text:=InText.Text+StringOfChar(' ',8*(Length(InText.Text) div 8+1)-Length(InText.Text));
OutText.Text:='';
for i:=1 to Length(InText.Text) div 8 do
begin
OutText.Text:=OutText.Text+CodeDES(Copy(InText.Text,8*(i-1)+1,8),txtKey.Text);
end;
end;
procedure TForm1.N2Click(Sender: TObject);
begin
Close;
end;
procedure TForm1.N3Click(Sender: TObject);
begin
ShowMessage('Выполнил учащийся группы 62411 Шут Максим Леонидович.');
end;
procedure TForm1.N4Click(Sender: TObject);
begin
ShowMessage('DES (англ. data encryption standard) -- алгоритм для симметричного шифрования, разработанный фирмой IBM и утверждённый правительством США в 1977 году как официальный стандарт (FIPS 46-3). ');
end;
//расшифровать
procedure TForm1.Button1Click(Sender: TObject);
var
i:integer;
begin
Memo2.Text:='';
for i:=1 to Length(Memo1.Text) div 8 do
begin
Memo2.Text:=Memo2.Text+DecodeDES(Copy(Memo1.Text,8*(i-1)+1,8),Edit1.Text);
end;
end;
end.
Размещено на Allbest.ru
Подобные документы
Исследование симметричных алгоритмов блочного шифрования. Минусы и плюсы алгоритма IDEA. Разработка программы аутентификации пользователя и сообщений на основе алгоритма IDEA. Выбор языка программирования. Тестирование и реализация программного средства.
курсовая работа [314,2 K], добавлен 27.01.2015Теоретическое исследование вопроса и практическое применение. Общие сведения о графах. Алгоритм Дейкстры. Особенности работы в среде. Программная реализация. Описание алгоритма и структуры программы. Описание программных средств. Текст программы.
курсовая работа [1,0 M], добавлен 27.11.2007Разработка приложения для шифрования данных с помощью алгоритма DES5: процесс шифрования, расшифрования, получение ключей. Спецификация программы, процедуры и функции; описание интерфейса пользователя. Реализация задачи в среде программирования DELPHI.
курсовая работа [812,6 K], добавлен 27.03.2012Составление алгоритма и разработка в среде программирования Delphi 7 программы, вычисляющей макроэкономические индексы цен. Реализация программы в виде 4 форм и 1 диалогового окна. Описание алгоритма решения задачи. Текст программы, руководство оператора.
курсовая работа [1,4 M], добавлен 04.06.2013Симметрическое шифрование как способ шифрования, в котором применяется один и тот же криптографический ключ. Функции стандартного диалогового окна открытия и сохранения файла. Характерная схема действий при генерации подписи. Цифровая подпись файла.
курсовая работа [641,5 K], добавлен 14.06.2011Описание алгоритма хода ЭВМ в режиме "пользователь-компьютер" в игре "Морской бой". Описание совокупности классов, их полей и методов. Разработка интерфейса и руководства пользователя по проведению игры. Листинг программы, написанной на языке Java.
курсовая работа [645,0 K], добавлен 26.03.2014Симметричные криптосистемы; алгоритмы шифрования и дешифрования данных, их применение в компьютерной технике в системах защиты конфиденциальной и коммерческой информации. Основные режимы работы алгоритма DES, разработка программной реализации ключа.
курсовая работа [129,6 K], добавлен 17.02.2011Оценка погрешности и точности в математике. Составление программы и алгоритма для численного дифференцирования с заданной допустимой погрешностью на алгоритмическом языке Turbo Pascal 7.0. Составление алгоритма и программы аппроксимации функции.
курсовая работа [810,6 K], добавлен 24.03.2012Рассмотрение шифрования электронных документов ассиметричным методом. Формирование виртуальных защищенных каналов передачи данных при помощи программного средства Visual Studio 2010. Написание алгоритма и программы. Описание руководства пользователя.
курсовая работа [509,4 K], добавлен 11.10.2014Осуществление работы разрабатываемой программы на основе алгоритма, использующего Z-буфер. Аналитическое описание программной реализации. Алгоритмы основных функций программы. Содержание руководства пользователя. Файлы программы, пункты главного меню.
курсовая работа [1,7 M], добавлен 15.04.2015