4.1 Общее описание
Для разработки программы были выбраны языки программирования Delphi 5.0 (Object Pascal) - разработка удобного интерфейса и встроенный ассемблер - для написания, собственно, алгоритмов шифрования.
Проект состоит из девяти модулей:
GOST, K1, K2 - реализация алгоритмов ГОСТ 28147-89 и тестовых методов шифрования.
CodingTools, CodingUnit - модули, реализующие вспомогательные алгоритмы и типы данных.
OptionsUnit, ProgressUnit, TestUnit - модули, описывающие интерфейс с пользователем.
Hazard - основной модуль программы. Создает окна и запускает программу.
Программа использует три формы (окна), созданные с помощью среды Delphi.
Основная форма TestForm, содержит список файлов и кнопки запуска процесса шифрования, выхода, вызова окна настроек, добавления и очистки списка (рисунок 4.1).
Окно настроек содержит списки поддерживаемых и применяемых методов шифрования, поле описания метода и поле ввода ключа (рисунок 4.2).
Третье окно - ProgressForm появляется при запуске процесса кодирования и состоит из двух надписей и двух индикаторов.
Рисунок 4.1 - Интерфейс программы
4.2 Дополнительные модули
Модуль CodingTools содержит описание типов для 64,48 и 32-разрядных чисел и процедуры их обработки: сложение по модулю 2, &, |, кодирование по таблице, разложение на числа меньшей разрядности. Также он содержит описания параметров кодирования и тип-шаблон функции шифрования.
Модуль CodingUnit содержит список встроенных алгоритмов и общие функции: обработка командной строки, подбор функции шифрования, шифрование файла, процедуры поиска функций по имени или индексу, поиск ошибок и оповещение.
Модули методов экспортируют каждый по две процедуры - шифрование и дешифрацию блоков по 64К.
5. Руководство пользователя
Программа работает под управлением ОС Windows 95/98/ME и требует правильной инсталляции. После инсталляции программу можно запустить из меню «Пуск» либо из командной строки эмуляции MS-DOS.
Командная строка имеет следующий вид:
Hazard.exe [/D] [путь к файлу [путь к файлу […]]]
/D - дешифрование
Чтобы запустить программу в режиме шифрования или дешифрования из графической оболочки Windows нужно воспользоваться соответствующими ярлыками из меню «Программы».
Чтобы добавить файлы в список шифрования/дешифрования можно воспользоваться соответствующей кнопкой на главной панели программы, либо «перетащить» их из окна проводника Windows.
Чтобы выбрать алгоритм шифрования нужно нажать кнопку «Настройки». Появится окно со списками поддерживаемых и применяющихся методов и полем ввода ключа.
После выбора методов программа рассчитает окончательный ключ, который может быть использован для расшифровывания файлов. Можно не запоминать окончательный ключ, в таком случае необходимо запомнить ключи каждого из выбранных методов и при расшифровывании сделать соответствующие настройки.
При нажатии на кнопку запуска появится индикатор прогресса, который отобразит состояние процесса шифрования текущего файла и процесса шифрования в общем.
При дешифровании следует учитывать, что программа расшифровывает файлы только с расширением .crf.
Заключение
В результате курсовой работы была разработана первая версия программы, осуществляющей шифрование информации. В дальнейшем предполагается разработка и усовершенствование комплекса программ, обеспечивающих защиту информации от несанкционированного доступа. В процессе разработки были закреплены навыки шифрования информации по ГОСТ 28147-89 и программирования на ассемблере.
Библиографический список
1. Конспект лекций по курсу «Кодирование и защита информации»
2. Андрей Винокуров. «Алгоритм шифрования ГОСТ 28147-89, его использование и реализация для компьютеров платформы Intel x86»
3. Михаил Гук. «Процессоры Pentium II, Pentium Pro и просто Pentium», Санкт-Петербург «Питер», 1999 г.
Приложение А
program Hazard;
uses
Windows,
Messages,
SysUtils,
Forms,
TestUnit in 'TestUnit.pas' {MainForm},
CodingUnit in 'CodingUnit.pas',
OptionsUnit in 'OptionsUnit.pas' {OptionsForm},
K1 in 'K1.pas',
K2 in 'K2.pas',
K3 in 'K3.pas',
ProgressUnit in 'ProgressUnit.pas' {ProgressForm},
GOST in 'GOST.pas';
{$R *.RES}
{$R Laynik.res}
function AlreadyRunning: boolean;
begin
Result:=False;
if FindWindow('TMainForm','Кодирование')<>0 then
Result:=True;
end;
Decode:=false;
If not AlreadyRunning then
Application.Initialize;
Application.Title := '[LG] Hazard';
Application.CreateForm(TMainForm, MainForm);
Application.CreateForm(TOptionsForm, OptionsForm);
Application.CreateForm(TProgressForm, ProgressForm);
MainForm.DoCommandLine(String(system.CmdLine));
Application.Run;
end else
MessageBox(0,'Приложение уже запущено','Ошибка',MB_ICONSTOP+MB_OK);
end
end.
unit K1;
interface
uses CodingTools;
function Coding_K1(Buf: Pointer; Size: LongWord; Param: TCodingParameters):Integer;
function DeCoding_K1(Buf: Pointer; Size: LongWord; Param: TCodingParameters):Integer;
implementation
const
FShTable: TConvertTable64 =
(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,56,48,40,32,24,16, 8, 0,
58,50,42,34,26,18,10, 2,60,52,
44,36,28,20,12, 4,62,54,46,38,
30,22,14, 6);
LShTable: TConvertTable64 =
(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,32, 0,40, 8,
48,16,56,24);
procedure K1Coding64bits(A: word64; var R: word64; K1:word64);
convert(A,FShTable,R);
asm
push esi
mov esi,DWORD[R]
mov eax,DWORD[K1]
xor [esi],eax
add esi,4
mov eax,DWORD[K1+4]
pop esi
procedure K1DeCoding64bits(A: word64; var R: word64; K1:word64);
xor DWORD[A],eax
xor DWORD[A+4],eax
convert(A,LShTable,R);
var
i,j,l:integer;
a,r: ^word64;
k: word64;
for i:=0 to 7 do
k.v8[i]:=BYTE(Param.Key[i]);
convert(K,LshTable,K);
l:=Size div 8;
for i:=1 to Param.WayCount do
for j:=0 to l-1 do
a:=Pointer(LongWord(Buf)+j*8);
r:=a;
K1Coding64bits(A^,R^,K);
result:=0;
a,r:^word64;
K1DeCoding64bits(A^,R^,K);
unit K2;
function Coding_K2(Buf: Pointer; Size: LongWord; Param: TCodingParameters):Integer;
function DeCoding_K2(Buf: Pointer; Size: LongWord; Param: TCodingParameters):Integer;
Страницы: 1, 2, 3, 4, 5