Реализация криптографического алгоритма (AES) Rijndael

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

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык русский
Дата добавления 12.04.2012
Размер файла 994,9 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

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

xor ((W3 shl 24) or (W3 shr 8))) xor Key[31];

 // раунд 4

W0:= InverseTable [Byte(T1 [0])]; W1:= InverseTable [Byte(T1 [3] shr 8)];

W2:= InverseTable [Byte(T1 [2] shr 16)]; W3:= InverseTable [Byte(T1 [1] shr 24)];

T0 [0]:= (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16))

xor ((W3 shl 24) or (W3 shr 8))) xor Key[24];

W0:= InverseTable [Byte(T1 [1])]; W1:= InverseTable [Byte(T1 [0] shr 8)];

W2:= InverseTable [Byte(T1 [3] shr 16)]; W3:= InverseTable [Byte(T1 [2] shr 24)];

T0 [1]:= (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16))

xor ((W3 shl 24) or (W3 shr 8))) xor Key[25];

W0:= InverseTable [Byte(T1 [2])]; W1:= InverseTable [Byte(T1 [1] shr 8)];

W2:= InverseTable [Byte(T1 [0] shr 16)]; W3:= InverseTable [Byte(T1 [3] shr 24)];

T0 [2]:= (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16))

xor ((W3 shl 24) or (W3 shr 8))) xor Key[26];

W0:= InverseTable [Byte(T1 [3])]; W1:= InverseTable [Byte(T1 [2] shr 8)];

W2:= InverseTable [Byte(T1 [1] shr 16)]; W3:= InverseTable [Byte(T1 [0] shr 24)];

T0 [3]:= (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16))

xor ((W3 shl 24) or (W3 shr 8))) xor Key[27];

 // раунд 5

W0:= InverseTable [Byte(T0 [0])]; W1:= InverseTable [Byte(T0 [3] shr 8)];

W2:= InverseTable [Byte(T0 [2] shr 16)]; W3:= InverseTable [Byte(T0 [1] shr 24)];

T1 [0]:= (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16))

xor ((W3 shl 24) or (W3 shr 8))) xor Key[20];

W0:= InverseTable [Byte(T0 [1])]; W1:= InverseTable [Byte(T0 [0] shr 8)];

W2:= InverseTable [Byte(T0 [3] shr 16)]; W3:= InverseTable [Byte(T0 [2] shr 24)];

T1 [1]:= (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16))

xor ((W3 shl 24) or (W3 shr 8))) xor Key[21];

W0:= InverseTable [Byte(T0 [2])]; W1:= InverseTable [Byte(T0 [1] shr 8)];

W2:= InverseTable [Byte(T0 [0] shr 16)]; W3:= InverseTable [Byte(T0 [3] shr 24)];

T1 [2]:= (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16))

xor ((W3 shl 24) or (W3 shr 8))) xor Key[22];

W0:= InverseTable [Byte(T0 [3])]; W1:= InverseTable [Byte(T0 [2] shr 8)];

W2:= InverseTable [Byte(T0 [1] shr 16)]; W3:= InverseTable [Byte(T0 [0] shr 24)];

T1 [3]:= (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16))

xor ((W3 shl 24) or (W3 shr 8))) xor Key[23];

 // раунд 6

W0:= InverseTable [Byte(T1 [0])]; W1:= InverseTable [Byte(T1 [3] shr 8)];

W2:= InverseTable [Byte(T1 [2] shr 16)]; W3:= InverseTable [Byte(T1 [1] shr 24)];

T0 [0]:= (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16))

xor ((W3 shl 24) or (W3 shr 8))) xor Key[16];

W0:= InverseTable [Byte(T1 [1])]; W1:= InverseTable [Byte(T1 [0] shr 8)];

W2:= InverseTable [Byte(T1 [3] shr 16)]; W3:= InverseTable [Byte(T1 [2] shr 24)];

T0 [1]:= (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16))

xor ((W3 shl 24) or (W3 shr 8))) xor Key[17];

W0:= InverseTable [Byte(T1 [2])]; W1:= InverseTable [Byte(T1 [1] shr 8)];

W2:= InverseTable [Byte(T1 [0] shr 16)]; W3:= InverseTable [Byte(T1 [3] shr 24)];

T0 [2]:= (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16))

xor ((W3 shl 24) or (W3 shr 8))) xor Key[18];

W0:= InverseTable [Byte(T1 [3])]; W1:= InverseTable [Byte(T1 [2] shr 8)];

W2:= InverseTable [Byte(T1 [1] shr 16)]; W3:= InverseTable [Byte(T1 [0] shr 24)];

T0 [3]:= (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16))

xor ((W3 shl 24) or (W3 shr 8))) xor Key[19];

 // раунд 7

W0:= InverseTable [Byte(T0 [0])]; W1:= InverseTable [Byte(T0 [3] shr 8)];

W2:= InverseTable [Byte(T0 [2] shr 16)]; W3:= InverseTable [Byte(T0 [1] shr 24)];

T1 [0]:= (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16))

xor ((W3 shl 24) or (W3 shr 8))) xor Key[12];

W0:= InverseTable [Byte(T0 [1])]; W1:= InverseTable [Byte(T0 [0] shr 8)];

W2:= InverseTable [Byte(T0 [3] shr 16)]; W3:= InverseTable [Byte(T0 [2] shr 24)];

T1 [1]:= (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16))

xor ((W3 shl 24) or (W3 shr 8))) xor Key[13];

W0:= InverseTable [Byte(T0 [2])]; W1:= InverseTable [Byte(T0 [1] shr 8)];

W2:= InverseTable [Byte(T0 [0] shr 16)]; W3:= InverseTable [Byte(T0 [3] shr 24)];

T1 [2]:= (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16))

xor ((W3 shl 24) or (W3 shr 8))) xor Key[14];

W0:= InverseTable [Byte(T0 [3])]; W1:= InverseTable [Byte(T0 [2] shr 8)];

W2:= InverseTable [Byte(T0 [1] shr 16)]; W3:= InverseTable [Byte(T0 [0] shr 24)];

T1 [3]:= (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16))

xor ((W3 shl 24) or (W3 shr 8))) xor Key[15];

 // раунд 8

W0:= InverseTable [Byte(T1 [0])]; W1:= InverseTable [Byte(T1 [3] shr 8)];

W2:= InverseTable [Byte(T1 [2] shr 16)]; W3:= InverseTable [Byte(T1 [1] shr 24)];

T0 [0]:= (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16))

xor ((W3 shl 24) or (W3 shr 8))) xor Key[8];

W0:= InverseTable [Byte(T1 [1])]; W1:= InverseTable [Byte(T1 [0] shr 8)];

W2:= InverseTable [Byte(T1 [3] shr 16)]; W3:= InverseTable [Byte(T1 [2] shr 24)];

T0 [1]:= (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16))

xor ((W3 shl 24) or (W3 shr 8))) xor Key[9];

W0:= InverseTable [Byte(T1 [2])]; W1:= InverseTable [Byte(T1 [1] shr 8)];

W2:= InverseTable [Byte(T1 [0] shr 16)]; W3:= InverseTable [Byte(T1 [3] shr 24)];

T0 [2]:= (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16))

xor ((W3 shl 24) or (W3 shr 8))) xor Key[10];

W0:= InverseTable [Byte(T1 [3])]; W1:= InverseTable [Byte(T1 [2] shr 8)];

W2:= InverseTable [Byte(T1 [1] shr 16)]; W3:= InverseTable [Byte(T1 [0] shr 24)];

T0 [3]:= (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16))

xor ((W3 shl 24) or (W3 shr 8))) xor Key[11];

 // раунд 9

W0:= InverseTable [Byte(T0 [0])]; W1:= InverseTable [Byte(T0 [3] shr 8)];

W2:= InverseTable [Byte(T0 [2] shr 16)]; W3:= InverseTable [Byte(T0 [1] shr 24)];

T1 [0]:= (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16))

xor ((W3 shl 24) or (W3 shr 8))) xor Key[4];

W0:= InverseTable [Byte(T0 [1])]; W1:= InverseTable [Byte(T0 [0] shr 8)];

W2:= InverseTable [Byte(T0 [3] shr 16)]; W3:= InverseTable [Byte(T0 [2] shr 24)];

T1 [1]:= (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16))

xor ((W3 shl 24) or (W3 shr 8))) xor Key[5];

W0:= InverseTable [Byte(T0 [2])]; W1:= InverseTable [Byte(T0 [1] shr 8)];

W2:= InverseTable [Byte(T0 [0] shr 16)]; W3:= InverseTable [Byte(T0 [3] shr 24)];

T1 [2]:= (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16))

xor ((W3 shl 24) or (W3 shr 8))) xor Key[6];

W0:= InverseTable [Byte(T0 [3])]; W1:= InverseTable [Byte(T0 [2] shr 8)];

W2:= InverseTable [Byte(T0 [1] shr 16)]; W3:= InverseTable [Byte(T0 [0] shr 24)];

T1 [3]:= (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16))

xor ((W3 shl 24) or (W3 shr 8))) xor Key[7];

 // Последнийраундпреобразований

W0:= LastInverseTable [Byte(T1 [0])]; W1:= LastInverseTable [Byte(T1 [3] shr 8)];

W2:= LastInverseTable [Byte(T1 [2] shr 16)]; W3:= LastInverseTable [Byte(T1 [1] shr 24)];

T0 [0]:= (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16))

xor ((W3 shl 24) or (W3 shr 8))) xor Key[0];

W0:= LastInverseTable [Byte(T1 [1])]; W1:= LastInverseTable [Byte(T1 [0] shr 8)];

W2:= LastInverseTable [Byte(T1 [3] shr 16)]; W3:= LastInverseTable [Byte(T1 [2] shr 24)];

T0 [1]:= (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16))

xor ((W3 shl 24) or (W3 shr 8))) xor Key[1];

W0:= LastInverseTable [Byte(T1 [2])]; W1:= LastInverseTable [Byte(T1 [1] shr 8)];

W2:= LastInverseTable [Byte(T1 [0] shr 16)]; W3:= LastInverseTable [Byte(T1 [3] shr 24)];

T0 [2]:= (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16))

xor ((W3 shl 24) or (W3 shr 8))) xor Key[2];

W0:= LastInverseTable [Byte(T1 [3])]; W1:= LastInverseTable [Byte(T1 [2] shr 8)];

W2:= LastInverseTable [Byte(T1 [1] shr 16)]; W3:= LastInverseTable [Byte(T1 [0] shr 24)];

T0 [3]:= (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16))

xor ((W3 shl 24) or (W3 shr 8))) xor Key[3];

 // Конечное преобразование

PLongWord (@OutBuf[0])^:= T0 [0]; PLongWord (@OutBuf[4])^:= T0 [1];

PLongWord (@OutBuf[8])^:= T0 [2]; PLongWord (@OutBuf[12])^:= T0 [3];

end;

 // Сначала ключ переводится к расширенному

procedure EncryptAESStreamECB (Source: TStream; Count: cardinal;

const Key: TAESKey128; Dest: TStream);

var

ExpandedKey: TAESExpandedKey128;

begin

ExpandAESKeyForEncryption (Key, ExpandedKey);

 // Вызов из этой процедуры процедуры шифорования с расширенным ключом

EncryptAESStreamECB (Source, Count, ExpandedKey, Dest);

end;

 // Шифрованиепотока

procedure EncryptAESStreamECB (Source: TStream; Count: cardinal;

const ExpandedKey: TAESExpandedKey128; Dest: TStream);

var

TempIn, TempOut: TAESBuffer; // Размер буферов считывания и записи

Done: cardinal;

st: TStringStream;

tick: integer;

begin

st:= TStringStream. Create('');

if Count = 0 then

begin

Source. Position:= 0; // Указательвначалопотока

Count:= Source. Size; // Определение текущего размера потока

end

else Count:= Min (Count, Source. Size - Source. Position);

if Count = 0 then exit;

while Count >= SizeOf(TAESBuffer) do

begin

Done:= Source. Read (TempIn, SizeOf(TempIn)); // Считываемданныеизпотока

if Done < SizeOf(TempIn) then

raise EStreamError. Create(SReadError);

EncryptAES (TempIn, ExpandedKey, TempOut);

if flag = false then

begin

 // Вывод входного и выходного блоков

FmStop. EditIn. Text:= IntToHex (TempIn[0], 2)+IntToHex (TempIn[1], 2)+

IntToHex (TempIn[2], 2)+IntToHex (TempIn[3], 2)+IntToHex (TempIn[4], 2)+

IntToHex (TempIn[5], 2)+IntToHex (TempIn[6], 2)+IntToHex (TempIn[7], 2)+

IntToHex (TempIn[8], 2)+IntToHex (TempIn[9], 2)+IntToHex (TempIn[10], 2)+

IntToHex (TempIn[11], 2)+IntToHex (TempIn[12], 2)+IntToHex (TempIn[13], 2)+

IntToHex (TempIn[14], 2)+IntToHex (TempIn[15], 2);

FmStop. EditOut. Text:= IntToHex (TempOut[0], 2)+IntToHex (TempOut[1], 2)+

IntToHex (TempOut[2], 2)+IntToHex (TempOut[3], 2)+IntToHex (TempOut[4], 2)+

IntToHex (TempOut[5], 2)+IntToHex (TempOut[6], 2)+IntToHex (TempOut[7], 2)+

IntToHex (TempOut[8], 2)+IntToHex (TempOut[9], 2)+IntToHex (TempOut[10], 2)+

IntToHex (TempOut[11], 2)+IntToHex (TempOut[12], 2)+IntToHex (TempOut[13], 2)+

IntToHex (TempOut[14], 2)+IntToHex (TempOut[15], 2);

 //FmStop

end;

Done:= Dest. Write (TempOut, SizeOf(TempOut));

st. Write (TempOut, SizeOf(TempOut));

Form1. MemoOut. Text:= st. DataString;

if Form1. RadioGroup1. ItemIndex = 1 then

begin

tick:= GetTickCount;

repeat

Application. ProcessMessages;

until (GetTickCount-tick)>StrToInt (Form1.editDelay. Text);

end;

if Done < SizeOf(TempOut) then

raise EStreamError. Create(SWriteError);

Dec (Count, SizeOf(TAESBuffer));

end; //while

if Count > 0 then

begin

Done:= Source. Read (TempIn, Count);

if Done < Count then

raise EStreamError. Create(SReadError);

FillChar (TempIn[Count], SizeOf(TempIn) - Count, 0);

EncryptAES (TempIn, ExpandedKey, TempOut);

if flag = false then

begin

 // Вывод входного и выходного блоков

FmStop. EditIn. Text:= IntToHex (TempIn[0], 2)+IntToHex (TempIn[1], 2)+

IntToHex (TempIn[2], 2)+IntToHex (TempIn[3], 2)+IntToHex (TempIn[4], 2)+

IntToHex (TempIn[5], 2)+IntToHex (TempIn[6], 2)+IntToHex (TempIn[7], 2)+

IntToHex (TempIn[8], 2)+IntToHex (TempIn[9], 2)+IntToHex (TempIn[10], 2)+

IntToHex (TempIn[11], 2)+IntToHex (TempIn[12], 2)+IntToHex (TempIn[13], 2)+

IntToHex (TempIn[14], 2)+IntToHex (TempIn[15], 2);

FmStop. EditOut. Text:= IntToHex (TempOut[0], 2)+IntToHex (TempOut[1], 2)+

IntToHex (TempOut[2], 2)+IntToHex (TempOut[3], 2)+IntToHex (TempOut[4], 2)+

IntToHex (TempOut[5], 2)+IntToHex (TempOut[6], 2)+IntToHex (TempOut[7], 2)+

IntToHex (TempOut[8], 2)+IntToHex (TempOut[9], 2)+IntToHex (TempOut[10], 2)+

IntToHex (TempOut[11], 2)+IntToHex (TempOut[12], 2)+IntToHex (TempOut[13], 2)+

IntToHex (TempOut[14], 2)+IntToHex (TempOut[15], 2);

 //FmStop

end;

Done:= Dest. Write (TempOut, SizeOf(TempOut));

st. Write (TempOut, SizeOf(TempOut));

Form1. MemoOut. Text:= st. DataString;

if Form1. RadioGroup1. ItemIndex = 0 then

begin

tick:= GetTickCount;

repeat

Application. ProcessMessages;

until (GetTickCount-tick)>StrToInt (Form1.editDelay. Text);

end;

if Done < SizeOf(TempOut) then

raise EStreamError. Create(SWriteError);

end;

st. Free;

Form1. Label_Status. Caption:= 'Шифрованиезавершено';

end;

 // Дешифрование

procedure DecryptAESStreamECB (Source: TStream; Count: cardinal;

const Key: TAESKey128; Dest: TStream);

var

ExpandedKey: TAESExpandedKey128;

begin

ExpandAESKeyForDecryption (Key, ExpandedKey);

 // Расширениеключадлядешифрования

DecryptAESStreamECB (Source, Count, ExpandedKey, Dest);

 // Дешифрование

end;

procedure DecryptAESStreamECB (Source: TStream; Count: cardinal;

const ExpandedKey: TAESExpandedKey128; Dest: TStream);

var

tick: integer;

TempIn, TempOut: TAESBuffer;

Done: cardinal;

stt: TStringStream;

begin

stt:= TStringStream. Create('');

if Count = 0 then

begin

Source. Position:= 0;

Count:= Source. Size;

end

else Count:= Min (Count, Source. Size - Source. Position);

if Count = 0 then exit;

if (Count mod SizeOf(TAESBuffer)) > 0 then

raise EAESError. Create(SInvalidInBufSize);

while Count >= SizeOf(TAESBuffer) do

begin

Done:= Source. Read (TempIn, SizeOf(TempIn));

if Done < SizeOf(TempIn) then

raise EStreamError. Create(SReadError);

DecryptAES (TempIn, ExpandedKey, TempOut);

if flag = false then

begin

 // Вывод входного и выходного блоков

FmStop. EditIn. Text:= IntToHex (TempIn[0], 2)+IntToHex (TempIn[1], 2)+

IntToHex (TempIn[2], 2)+IntToHex (TempIn[3], 2)+IntToHex (TempIn[4], 2)+

IntToHex (TempIn[5], 2)+IntToHex (TempIn[6], 2)+IntToHex (TempIn[7], 2)+

IntToHex (TempIn[8], 2)+IntToHex (TempIn[9], 2)+IntToHex (TempIn[10], 2)+

IntToHex (TempIn[11], 2)+IntToHex (TempIn[12], 2)+IntToHex (TempIn[13], 2)+

IntToHex (TempIn[14], 2)+IntToHex (TempIn[15], 2);

FmStop. EditOut. Text:= IntToHex (TempOut[0], 2)+IntToHex (TempOut[1], 2)+

IntToHex (TempOut[2], 2)+IntToHex (TempOut[3], 2)+IntToHex (TempOut[4], 2)+

IntToHex (TempOut[5], 2)+IntToHex (TempOut[6], 2)+IntToHex (TempOut[7], 2)+

IntToHex (TempOut[8], 2)+IntToHex (TempOut[9], 2)+IntToHex (TempOut[10], 2)+

IntToHex (TempOut[11], 2)+IntToHex (TempOut[12], 2)+IntToHex (TempOut[13], 2)+

IntToHex (TempOut[14], 2)+IntToHex (TempOut[15], 2);

 //FmStop

end;

stt. Write (TempOut, SizeOf(TempOut));

Form1. MemoOut. Text:= stt. DataString;

if Form1. RadioGroup1. ItemIndex = 1 then

begin

tick:= GetTickCount;

repeat

Application. ProcessMessages;

until (GetTickCount-tick)>StrToInt (Form1.editDelay. Text);

end;

Done:= Dest. Write (TempOut, SizeOf(TempOut));

if Done < SizeOf(TempOut) then

raise EStreamError. Create(SWriteError);

Dec (Count, SizeOf(TAESBuffer));

end;

stt. Free;

Form1. Label_Status. Caption:= 'Дешифрованиезавершено';

end;

procedure TForm1. Button1Click (Sender: TObject);

var stpath, stext: string;

begin

if OpenDialog1. Execute = True then

begin

Edit1. Text:= OpenDialog1. FileName;

MemoIn. Lines. LoadFromFile (Edit1.text);

Fpath:= Edit1. Text;

stpath:= ExtractFileDir(Fpath);

stExt:= ExtractFileExt(FPath);

If CBOpt. Text = «Шифрование» then

begin

LName. Caption:= 'Имязашифрованогофайла:';

Fpath:= stpath + '\EncodedFile'+stExt;

LPath. Caption:= FPath;

end

else

begin

LName. Caption:= 'Имядешифрованогофайла:';

Fpath:= stpath + '\DecodedFile'+stExt;

LPath. Caption:= FPath;

end;

end;

end;

procedure TForm1. Button2Click (Sender: TObject);

var

Source, Dest: TFileStream;

SrcFile, DestFile: string;

Start, Stop: cardinal;

Size: integer;

Key: TAESKey128; // Длина ключа и блока 128 бит

SrcBuf, DstBuf: array [0..16383] of byte;

SrcSize, DstSize: integer;

begin

If Edit1. Text = '' then exit;

 // Шифрование

if CBOpt. Text = «Шифрование» then

begin

Label_Status. Caption:= 'Шифрование…';

Refresh;

Source:= TFileStream. Create (Edit1. Text, fmOpenRead); // Открываемфайлдлячтения

try

Label4. Caption:= IntToStr (Source. Size div 1024) + ' KB'; // Выводразмерафайла

Refresh;

DestFile:= Fpath; // Файлназначения

Dest:= TFileStream. Create (DestFile, fmCreate); // Создаемновыйфайлилипереписываемужеимеющийся

try

Size:= Source. Size; // Определение размера источника

Dest. WriteBuffer (Size, SizeOf(Size)); // Задаем размер буфера назначения

FillChar (Key, SizeOf(Key), 0); // Заполняемключнулями

Move (PChar(Edit2. Text)^, Key, Min (SizeOf(Key), Length (Edit2. Text))); // Вначалоключазаписываемпароль

Start:= GetTickCount;

EncryptAESStreamECB (Source, 0, Key, Dest);

Stop:= GetTickCount;

Label_Time. Caption:= IntToStr (Stop - Start) + ' ms';

Refresh;

finally

Dest. Free;

end;

finally

Source. Free;

end;

end;

if CBOpt. Text = «Дешифрование» then

begin

 // Дешифрование

Label_Status. Caption:= 'Дешифрование…';

Refresh;

Source:= TFileStream. Create (Edit1. Text, fmOpenRead); // Источник - зашифрованныйфайл

try

Source. ReadBuffer (Size, SizeOf(Size)); // Считывание Size данныхизпотока

SrcFile:= fpath;

FillChar (Key, SizeOf(Key), 0); // Заполняемключнулями

Move (PChar(Edit2. Text)^, Key, Min (SizeOf(Key), Length (Edit2. Text))); // Вначалоключазаписываемпароль

DestFile:= Fpath;

Dest:= TFileStream. Create (DestFile, fmCreate); // Назначение

try

Start:= GetTickCount;

DecryptAESStreamECB (Source, Source. Size - Source. Position, Key, Dest);

Dest. Size:= Size;

Stop:= GetTickCount;

Label_Time. Caption:= IntToStr (Stop - Start) + ' ms';

Refresh;

finally

Dest. Free;

end;

finally

Source. Free;

end;

end;

end;

procedure TForm1. ButtonStopClick (Sender: TObject);

begin

flag:= true;

FmStop. ShowModal;

repeat

Application. ProcessMessages;

until not Flag;

end;

procedure TForm1.CBOptChange (Sender: TObject);

begin

If CBOpt. Text = «Шифрование» then

begin

Button2. Caption:= 'Шифровать';

LName. Caption:= 'Имязашифрованногофайла';

end

else

begin

Button2. Caption:= 'Дешифровать';

LName. Caption:= 'Имя Дешифрованного файла';

end;

end;

procedure TForm1. FormActivate (Sender: TObject);

begin

flag:= false;

end;

procedure TForm1. RadioGroup1Click (Sender: TObject);

begin

If RadioGroup1. ItemIndex = 0 then EditDelay. Enabled:= false else

EditDelay. Enabled:= true;

end;

procedure TForm1.MFExitClick (Sender: TObject);

begin

Close;

end;

procedure TForm1.MFChooseClick (Sender: TObject);

begin

Button1. Click;

end;

procedure TForm1. FormCreate (Sender: TObject);

begin

Application. HelpFile:= GetCurrentDir +'\AES.hlp';

end;

procedure TForm1.MHHelpClick (Sender: TObject);

begin

Application. HelpCommand (HELP_CONTENTS, 1);

end;

end.

Заключение

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

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

Список использованной литературы

1. Религии мира. Справочник. - Пер. с англ.: М.: Белфаксиздатгрупп, 1994.

2. Панасенко С.П. Алгоритмы шифрования. Специальный справочник. - СПб.: БХВ-Петербург, 2009.

3. Технические средства и методы защиты информации. Учебное пособие для вузов /А.П. Зайцев, А.А. Шелупанов, Р.В. Мещеряков и др.; под ред. А.П. Зайцева и А.А. Шелупанова. - 4-е изд., испр. И доп. - М., 2009.

4. Прикладная криптография. Брюс Шнайер, 2-е издание

Размещено на Allbest.ru


Подобные документы

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

    курсовая работа [45,0 K], добавлен 13.11.2009

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

    курсовая работа [301,9 K], добавлен 29.10.2017

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

    курсовая работа [314,2 K], добавлен 27.01.2015

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

    курсовая работа [812,6 K], добавлен 27.03.2012

  • Теоретическое исследование вопроса и практическое применение. Общие сведения о графах. Алгоритм Дейкстры. Особенности работы в среде. Программная реализация. Описание алгоритма и структуры программы. Описание программных средств. Текст программы.

    курсовая работа [1,0 M], добавлен 27.11.2007

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

    контрольная работа [1,1 M], добавлен 02.02.2012

  • Методы криптографической защиты информации в России в XIX веке. Описание структуры программы: библиотека DLL, графическая оболочка, консольная реализация. Вид функции шифрования. Инструкция системного программиста. Класс для шифровки, расшифровки данных.

    контрольная работа [26,3 K], добавлен 22.12.2011

  • Получение вейвлетов Габора из представления путем его поворота и растяжения для известного числа масштабов и ориентаций. Описание процедуры pullback. Детектор края, реализация алгоритма. Генерация представления изображения с помощью вейвлетов Габора.

    курсовая работа [1021,4 K], добавлен 29.10.2017

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

    курсовая работа [641,5 K], добавлен 14.06.2011

  • Особенности метода неопределенных множителей Лагранжа, градиентного метода и метода перебора и динамического программирования. Конструирование алгоритма решения задачи. Структурная схема алгоритма сценария диалога и описание его программной реализации.

    курсовая работа [1010,4 K], добавлен 10.08.2014

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.