p align="left">При нажатии на кнопку запуска появится индикатор прогресса, который отобразит состояние процесса шифрования текущего файла и процесса шифрования в общем. При дешифровании следует учитывать, что программа расшифровывает файлы только с расширением .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; begin Decode:=false; If not AlreadyRunning then begin 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 begin 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); begin 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] xor [esi],eax pop esi end; end; procedure K1DeCoding64bits(A: word64; var R: word64; K1:word64); begin asm mov eax,DWORD[K1] xor DWORD[A],eax mov eax,DWORD[K1+4] xor DWORD[A+4],eax end; convert(A,LShTable,R); end; function Coding_K1(Buf: Pointer; Size: LongWord; Param: TCodingParameters):Integer; var i,j,l:integer; a,r: ^word64; k: word64; begin 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 begin for j:=0 to l-1 do begin a:=Pointer(LongWord(Buf)+j*8); r:=a; K1Coding64bits(A^,R^,K); end; end; result:=0; end; function DeCoding_K1(Buf: Pointer; Size: LongWord; Param: TCodingParameters):Integer; var i,j,l:integer; a,r:^word64; k: word64; begin 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 begin for j:=0 to l-1 do begin a:=Pointer(LongWord(Buf)+j*8); r:=a; K1DeCoding64bits(A^,R^,K); end; end; result:=0; end; end. unit K2; interface uses CodingTools; function Coding_K2(Buf: Pointer; Size: LongWord; Param: TCodingParameters):Integer; function DeCoding_K2(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 K2Coding64bits(A: word64; var R: word64; B: byte); begin convert(A,FShTable,R); asm push esi mov esi,DWORD[R] mov cl,[b] ror dword[esi],cl add esi,4 mov cl,[b] ror dword[esi],cl pop esi end; end; procedure K2DeCoding64bits(A: word64; var R: word64; B: Byte); begin asm mov cl,[b] rol DWORD[A],cl mov cl,[b] rol DWORD[A+4],cl end; convert(A,LShTable,R); end; function Coding_K2(Buf: Pointer; Size: LongWord; Param: TCodingParameters):Integer; var i,j,l:integer; a,r: ^word64; k: word64; b: byte; begin b:=0; for i:=0 to 7 do k.v8[i]:=BYTE(Param.Key[i]); convert(K,LshTable,K); for i:=0 to 7 do b:=b xor K.v8[i]; l:=Size div 8; for i:=1 to Param.WayCount do begin for j:=0 to l-1 do begin a:=Pointer(LongWord(Buf)+j*8); r:=a; K2Coding64bits(A^,R^,B); end; end; result:=0; end; function DeCoding_K2(Buf: Pointer; Size: LongWord; Param: TCodingParameters):Integer; var i,j,l:integer; a,r:^word64; k: word64; b: byte; begin b:=0; for i:=0 to 7 do k.v8[i]:=BYTE(Param.Key[i]); convert(K,LshTable,K); for i:=0 to 7 do b:=b xor K.v8[i]; l:=Size div 8; for i:=1 to Param.WayCount do begin for j:=0 to l-1 do begin a:=Pointer(LongWord(Buf)+j*8); r:=a; K2DeCoding64bits(A^,R^,B); end; end; result:=0; end; end. unit K3; interface uses CodingTools; function Coding_K3(Buf: Pointer; Size: LongWord; Param: TCodingParameters):Integer; function DeCoding_K3(Buf: Pointer; Size: LongWord; Param: TCodingParameters):Integer; implementation uses SysUtils; 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 K3Coding64bits(A: word64; var R: word64; B: byte); begin convert(A,FShTable,R); asm push esi mov esi,DWORD[R] mov cl,[b] ror dword[esi],cl add esi,4 mov cl,[b] ror dword[esi],cl pop esi end; end; procedure K3DeCoding64bits(A: word64; var R: word64; B: Byte); begin asm mov cl,[b] rol DWORD[A],cl mov cl,[b] rol DWORD[A+4],cl end; convert(A,LShTable,R); end; function Coding_K3(Buf: Pointer; Size: LongWord; Param: TCodingParameters):Integer; var i,j:integer; a,r: ^word64; k: word64; b: byte; begin b:=0; k.v32[0]:=0; k.v32[1]:=0; for i:=0 to StrLen(Param.Key)-1 do k.v8[i]:=BYTE(Param.Key[i]); convert(K,LshTable,K); for i:=0 to 7 do b:=b xor K.v8[i]; for i:=1 to Param.WayCount do begin for j:=0 to Size-8 do begin a:=Pointer(LongWord(Buf)+j); r:=a; K3Coding64bits(A^,R^,B); end; end; result:=0; end; function DeCoding_K3(Buf: Pointer; Size: LongWord; Param: TCodingParameters):Integer; var i,j:integer; a,r:^word64; k: word64; b: byte; begin b:=0; k.v32[0]:=0; k.v32[1]:=0; for i:=0 to StrLen(Param.Key)-1 do k.v8[i]:=BYTE(Param.Key[i]); convert(K,LshTable,K); for i:=0 to 7 do b:=b xor K.v8[i]; for i:=1 to Param.WayCount do begin for j:=Size-8 downto 0 do begin a:=Pointer(LongWord(Buf)+j); r:=a; K3DeCoding64bits(A^,R^,B); end; end; result:=0; end; end. unit OptionsUnit;
Страницы: 1, 2, 3, 4
|