Автор: Пользователь скрыл имя, 26 Ноября 2011 в 09:27, курсовая работа
Шифрование — способ преобразования открытой информации в закрытую и обратно. Применяется для хранения важной информации в ненадёжных источниках или передачи её по незащищённым каналам связи. Согласно ГОСТ 28147-89, шифрование подразделяется на процесс зашифровывания и расшифровывания.
В зависимости от алгоритма преобразования данных, методы шифрования подразделяются на гарантированной или временной крипто-стойкости.
Введение 2
История AES 3
Описание AES 4
Программная реализация алгоритма AES 11
Листинг программы 13
Заключение 32
Список использованной литературы 33
end;
if Done < SizeOf(TempOut) then
raise
EStreamError.Create(
Dec(Count, SizeOf(TAESBuffer));
end; //while
if Count > 0 then
begin
Done := Source.Read(TempIn, Count);
if Done < Count then
raise
EStreamError.Create(
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[2],2)+
IntToHex(TempIn[5],2)+
IntToHex(TempIn[8],2)+
IntToHex(TempIn[11],2)+
IntToHex(TempIn[14],2)+
FmStop.EditOut.Text
:= IntToHex(TempOut[0],2)+
IntToHex(TempOut[2],2)+
IntToHex(TempOut[5],2)+
IntToHex(TempOut[8],2)+
IntToHex(TempOut[11],2)+
IntToHex(TempOut[14],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(
end;
if Done < SizeOf(TempOut) then
raise
EStreamError.Create(
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(
while Count >= SizeOf(TAESBuffer) do
begin
Done := Source.Read(TempIn, SizeOf(TempIn));
if Done < SizeOf(TempIn) then
raise
EStreamError.Create(
DecryptAES(TempIn, ExpandedKey, TempOut);
if flag = false then
begin
//Вывод входного и выходного блоков
FmStop.EditIn.Text
:= IntToHex(TempIn[0],2)+
IntToHex(TempIn[2],2)+
IntToHex(TempIn[5],2)+
IntToHex(TempIn[8],2)+
IntToHex(TempIn[11],2)+
IntToHex(TempIn[14],2)+
FmStop.EditOut.Text
:= IntToHex(TempOut[0],2)+
IntToHex(TempOut[2],2)+
IntToHex(TempOut[5],2)+
IntToHex(TempOut[8],2)+
IntToHex(TempOut[11],2)+
IntToHex(TempOut[14],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(
end;
Done := Dest.Write(TempOut, SizeOf(TempOut));
if Done < SizeOf(TempOut) then
raise
EStreamError.Create(
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(
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(
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_
end;
end.
Среди способов защиты информации наиболее важным считается криптографический. Он предусматривает такое преобразование информации, при котором она становится доступной для прочтения лишь обладателю некоторого секретного параметра (ключа). В последние годы область применения криптографии значительно расширилась. Ее стали повседневно использовать многие организации, коммерческие фирмы, частные лица, СМИ.
В
данной курсовой работе изучается алгоритм
шифрования данных AES: его история создания,
описание и программная реализация.