Алгоритм шифрования AES

Автор: Пользователь скрыл имя, 26 Ноября 2011 в 09:27, курсовая работа

Краткое описание

Шифрование — способ преобразования открытой информации в закрытую и обратно. Применяется для хранения важной информации в ненадёжных источниках или передачи её по незащищённым каналам связи. Согласно ГОСТ 28147-89, шифрование подразделяется на процесс зашифровывания и расшифровывания.
В зависимости от алгоритма преобразования данных, методы шифрования подразделяются на гарантированной или временной крипто-стойкости.

Оглавление

Введение 2
История AES 3
Описание AES 4
Программная реализация алгоритма AES 11
Листинг программы 13
Заключение 32
Список использованной литературы 33

Файлы: 1 файл

Курсач.docx

— 365.25 Кб (Скачать)

    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-е издание

Информация о работе Алгоритм шифрования AES