Автор работы: Пользователь скрыл имя, 08 Ноября 2011 в 19:02, курсовая работа
В настоящее время большое внимание уделяется информации, недаром наш век называют «информационным». Во время того, как люди познают технологии хранения и передачи информации, встает вопрос о ее защите от несанкционированного доступа. Для решения этой проблемы было разработано большое количество разнообразных методов кодирования информации, которые могут быть реализованы программно. Данная разработка представляет собой программный модуль, обеспечивающий шифрование и расшифровывание информационных блоков.
АННОТАЦИЯ
ВВЕДЕНИЕ
Постановка задачи
Основные понятия
Выбор методов шифрования
Программная реализация
Общее описание
Дополнительные модули
Руководство пользователя
ЗАКЛЮЧЕНИЕ
БИБЛИОГРАФИЧЕСКИЙ СПИСОК
ПРИЛОЖЕНИЕ А
i: integer;
begin
Result:=0;
for i:=1 to QolMethods do
begin
if
CompareStr(S,Methods[i].
Result:=i;
end;
end;
function MethodByChar(const C: Char):integer;
var
i: integer;
begin
Result:=0;
for i:=1 to QolMethods do
begin
if C=Methods[i].MethodKey then
Result:=i;
end;
end;
function
GenerateFileName(s:string):
begin
Result:=concat(s,'.crf');
end;
function
GenerateDecFileName(s:string):
begin
If
Pos('.CRF',UpperCase(s))<>0 then delete(s,Pos('.CRF',uppercase(
s:=concat(s,'.dec');
Result:=s;
end;
function DoCoding(S: String): integer;
var
j,i,ks,ls,size,res,fs,pr: integer;
f,outp: file;
buf: pointer;
S1: String;
begin
result:=0;
GetMem(buf,$10000);
fillchar(buf^,$10000,0);
if buf=nil then begin
ShowMessage('Не хватает памяти под буфер');
Result:=1;
exit;
end;
AssignFile(f,s);
s1:=GenerateFileName(s);
AssignFile(outp,s1);
{$I-}
Reset(f,1);
fs:=filesize(f);
Rewrite(outp,1);
{$I+}
if IOResult=0 then
begin
ProgressForm.
size:=$10000;
while size=$10000 do
begin
BlockRead(f,buf^,$10000,
for i:=1 to QolMethods do
begin
ks:=0;
if (size mod 8)<>0 then
begin
ls:=(8*((size div 8)+1));
ks:=ls-size;
for j:=size to ls-1 do PCHAR(buf)[j]:=#0;
end else ls:=size;
if
Used[i] then Methods[i].MethodProc(buf,ls,
if fs<>0 then pr:=round(filepos(f)*100 / fs) else pr:=round((100*i) / qolmethods);
ProgressForm.
end;
BlockWrite(outp,buf^,ls,
end;
if ks<>0 then blockwrite(outp,ks,1);
end
else ShowMessage('Ошибка обращения к '+S);
CloseFile(f);
CloseFile(outp);
FreeMem(buf,$10000);
ProgressForm.EndProcess;
end;
function DoDecoding(S: String): integer;
var
ks,pr,i,size,res,fs: integer;
f,outp: file;
buf: pointer;
s1: string;
begin
result:=0;
GetMem(buf,$10000);
fillchar(buf^,$10000,0);
if buf=nil then begin
ShowMessage('Не хватает памяти под буфер');
Result:=1;
exit;
end;
AssignFile(f,s);
s1:=GenerateDecFileName(
AssignFile(outp,s1);
{$I-}
Reset(f,1);
fs:=filesize(f);
Rewrite(outp,1);
{$I+}
if IOResult=0 then
begin
ProgressForm.
size:=$10000;
while size=$10000 do
begin
BlockRead(f,buf^,$10000,
for i:=QolMethods downto 1 do
begin
if
Used[i] then Methods[i].MethodDecProc(buf,
if fs<>0 then pr:=round(filepos(f)*100 / fs) else pr:=round((100*i) / qolmethods);
ProgressForm.
if (size mod 8)<>0 then
begin
ks:=byte(PCHAR(Buf)[size-
end else ks:=0;
end;
BlockWrite(outp,buf^,
end;
Seek(outp,filepos(outp)-
Truncate(outp);
end
else
ShowMessage('Ошибка обращения
CloseFile(f);
CloseFile(outp);
FreeMem(buf,$10000);
ProgressForm.EndProcess;
end;
function Coding_Kir;
begin
Result:=0;
end;
function DeCoding_Kir;
begin
Result:=0;
end;
end.
unit GOST;
interface
uses
SysUtils,
CodingTools;
function coding_GOST(Buf: Pointer; Size: LongWord; Param: TCodingParameters):Integer;
function
coding_GOSTSE(Buf: Pointer; Size: LongWord; Param: TCodingParameters):Integer;
implementation
var
Key:
array [0..7] of LongWord;
const
ExchTable: array [0..7,0..15] of byte =
((2,5,3,7,12,1,15,14,9,4,
(8,3,1,9,10,15,2,14,13,5,
(15,1,14,2,13,3,12,4,11,
(1,3,5,7,9,2,4,6,8,10,11,
(1,4,7,10,13,2,5,8,11,0,
(1,5,9,13,2,6,10,0,14,3,
(1,6,11,2,7,12,0,3,8,13,
(1,7,0,13,2,8,14,3,9,15,
C1 = $1010101;
C2
= $1010104;
procedure BaseStep(var N:word64; X: longword);
var
i:integer;
s:word64;
begin
s.v32[0]:=(N.v32[0] + X) mod $100000000;
for i:=0 to 3 do
begin
//Замена по таблице младшие или старшие 4 бита
s.v8[i]:=(ExchTable[i*2,(
end;
asm
push ecx
mov cl,11
rol DWORD[s.v32[0]],cl
pop ecx
end;
s.v32[0]:=s.v32[0] xor N.v32[1];
N.v32[1]:=N.v32[0];
N.v32[0]:=s.v32[0];
end;
procedure SEcoding64bits(var N:word64);
var
k,j: integer;
s:LongWord;
begin
for k:=1 to 3 do
for j:=0 to 7 do BaseStep(N,Key[j]);
for j:=7 downto 0 do BaseStep(N,Key[j]);
s:=N.v32[0];
N.v32[0]:=N.v32[1];
N.v32[1]:=s;
end;
procedure SEdecoding64bits(var N:word64);
var
k,j: integer;
s:LongWord;
begin
for j:=0 to 7 do BaseStep(N,Key[j]);
for k:=1 to 3 do
for j:=7 downto 0 do BaseStep(N,Key[j]);
s:=N.v32[0];
N.v32[0]:=N.v32[1];
N.v32[1]:=s;
end;
procedure GOST_G_coding(var T: pointer; S:word64; Size:word);
var
i:integer;
begin
SEcoding64bits(S);
for i:=1 to (Size div 8) do
begin
S.v32[0]:=(S.v32[0]+C1) mod $100000000;
S.v32[1]:=((S.v32[1]+C2-
word64(Pointer(LongWord(
word64(Pointer(LongWord(
word64(Pointer(LongWord(
word64(Pointer(LongWord(
end;
end;
function coding_GOST(Buf: Pointer; Size: LongWord; Param: TCodingParameters):Integer;
var
i: integer;
s: word64;
begin
s.v32[0]:=0; s.v32[1]:=0;
for i:=0 to 7 do
begin
Key[i]:=(BYTE(Param.Key[
(BYTE(Param.Key[i*4+1]) shr 8) or (BYTE(Param.Key[i*4]));
Информация о работе Защита информации от несанкционированного доступа