Контрольная работа по "Методам и средствам защиты информации"

Автор работы: Пользователь скрыл имя, 23 Мая 2013 в 18:17, контрольная работа

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

Для получения контрольной суммы, необходимо сгенерировать полином. Основное требование к полиному: его степень должна быть равна длине контрольной суммы в битах. При этом старший бит полинома обязательно должен быть равен «1».

Содержание

Составить программы, реализующие следующие криптографические методы:
Задание 1. Расчет циклического избыточного кода CRC-16.
Задание 2. Хеширование информации по алгоритму SHA-1. При выполнении этого задания использовать возможности криптографического интерфейса CryptoAPI.

Прикрепленные файлы: 1 файл

методы и средства защиты.docx

— 54.68 Кб (Скачать документ)

Министерство образования и  науки Российской Федерации

Федеральное государственное бюджетное  образовательное учреждение

высшего профессионального образования

«САМАРСКИЙ ГОСУДАРСТВЕННЫЙ

АЭРОКОСМИЧЕСКИЙ УНИВЕРСИТЕТ

имени академика С.П. КОРОЛЁВА

(национальный исследовательский  университет)

 

Факультет летательных аппаратов

Кафедра динамики полета и систем управления

 

 

 

 

Контрольная работа по методам и средствам защиты информации

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Выполнил: Закиева Л.Р, группа 9641

Преподаватель: Храмов А.А

 

 

 

 

 

Самара

 

2012

 

 

Вариант № 18

Составить программы, реализующие следующие криптографические  методы:

Задание 1. Расчет циклического избыточного кода CRC-16.

Задание 2. Хеширование информации по алгоритму SHA-1. При выполнении этого задания использовать возможности криптографического интерфейса CryptoAPI.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Задание 1.

 

Для получения контрольной суммы, необходимо сгенерировать полином. Основное требование к полиному: его  степень должна быть равна длине  контрольной суммы в битах. При  этом старший бит полинома обязательно  должен быть равен «1».

Из файла берется первое слово. Если старший бит в слове «1», то слово сдвигается влево на один разряд с последующим выполнением  операции XOR. Соответственно если старший  бит в слове «0», то после сдвига операция XOR не выполняется. После сдвига (умножения) теряется старый старший  бит, а младший бит освобождается (обнуляется). На место младшего бита загружается очередной бит из файла. Операция повторяется до тех  пор, пока не загрузится последний бит  файла.

После прохождения всего файла, в слове остается остаток, который  и является контрольной суммой.

 

 

 

Листинг программы

 
unit Unit1;

interface

uses

  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

  Dialogs, StdCtrls;

type

  TForm1 = class(TForm)

    button1: TButton;

    edit2: TEdit;

    edit3: TEdit;

    procedure edt3KeyPress(Sender: TObject; var Key: Char);

    procedure button1Click(Sender: TObject);

    private

    { Private declarations }

  public

    { Public declarations }

  end;

 

type TBuffer = array of Byte;

 

var

  Form1: TForm1;

 

implementation

 

CONST crctab: ARRAY[0..255] OF WORD = (

    $0000, $C0C1, $C181, $0140, $C301, $03C0, $0280, $C241,

    $C601, $06C0, $0780, $C741, $0500, $C5C1, $C481, $0440,

    $CC01, $0CC0, $0D80, $CD41, $0F00, $CFC1, $CE81, $0E40,

    $0A00, $CAC1, $CB81, $0B40, $C901, $09C0, $0880, $C841,

    $D801, $18C0, $1980, $D941, $1B00, $DBC1, $DA81, $1A40,

    $1E00, $DEC1, $DF81, $1F40, $DD01, $1DC0, $1C80, $DC41,

    $1400, $D4C1, $D581, $1540, $D701, $17C0, $1680, $D641,

    $D201, $12C0, $1380, $D341, $1100, $D1C1, $D081, $1040,

    $F001, $30C0, $3180, $F141, $3300, $F3C1, $F281, $3240,

    $3600, $F6C1, $F781, $3740, $F501, $35C0, $3480, $F441,

    $3C00, $FCC1, $FD81, $3D40, $FF01, $3FC0, $3E80, $FE41,

    $FA01, $3AC0, $3B80, $FB41, $3900, $F9C1, $F881, $3840,

    $2800, $E8C1, $E981, $2940, $EB01, $2BC0, $2A80, $EA41,

    $EE01, $2EC0, $2F80, $EF41, $2D00, $EDC1, $EC81, $2C40,

    $E401, $24C0, $2580, $E541, $2700, $E7C1, $E681, $2640,

    $2200, $E2C1, $E381, $2340, $E101, $21C0, $2080, $E041,

    $A001, $60C0, $6180, $A141, $6300, $A3C1, $A281, $6240,

    $6600, $A6C1, $A781, $6740, $A501, $65C0, $6480, $A441,

    $6C00, $ACC1, $AD81, $6D40, $AF01, $6FC0, $6E80, $AE41,

    $AA01, $6AC0, $6B80, $AB41, $6900, $A9C1, $A881, $6840,

    $7800, $B8C1, $B981, $7940, $BB01, $7BC0, $7A80, $BA41,

    $BE01, $7EC0, $7F80, $BF41, $7D00, $BDC1, $BC81, $7C40,

    $B401, $74C0, $7580, $B541, $7700, $B7C1, $B681, $7640,

    $7200, $B2C1, $B381, $7340, $B101, $71C0, $7080, $B041,

    $5000, $90C1, $9181, $5140, $9301, $53C0, $5280, $9241,

    $9601, $56C0, $5780, $9741, $5500, $95C1, $9481, $5440,

    $9C01, $5CC0, $5D80, $9D41, $5F00, $9FC1, $9E81, $5E40,

    $5A00, $9AC1, $9B81, $5B40, $9901, $59C0, $5880, $9841,

    $8801, $48C0, $4980, $8941, $4B00, $8BC1, $8A81, $4A40,

    $4E00, $8EC1, $8F81, $4F40, $8D01, $4DC0, $4C80, $8C41,

    $4400, $84C1, $8581, $4540, $8701, $47C0, $4680, $8641,

    $8201, $42C0, $4380, $8341, $4100, $81C1, $8081, $4040 );

 

{$R *.dfm}

 

function crc16(twoSym:array of Word; size:Word):Word;

var

 i:Integer;

 crc:Word;

begin

  crc:=$FFFF;

 

  for i:=0 to ((size div 2)-1) do

  begin

    crc:=  (crc shr 8) xor CrcTab[(crc and $FF) xor twoSym[i]];

  end;

   Result:=(crc shr 8) or (crc shl 8);

end;

 

function StrToByte(p1:string):integer;

const hex:array['A'..'F'] of Word=(10,11,12,13,14,15);

var

 Int,i:Integer;

begin

   Int:=0;

       for i := 1 to Length(P1) do

        if P1[i] < 'A' then Int := Int * 16 + ORD(P1[i]) - 48

        else Int := Int * 16 + HEX[p1[i]];

   Result:=int;

end;

 

 

procedure TForm1.edt3KeyPress(Sender: TObject; var Key: Char);

begin

   if Key in [#8,'0'..'9','a'..'f','A'..'F'] then Key:=System.UpCase(Key) else

   begin

     ShowMessage('Недопустимый формат');

     Key:=#0;

   end;

end;

 

Procedure TForm1.button1Click(Sender: TObject);

Var

  crc: Word;

  i,j: Integer;

  b: array[1..100] of Word;

Begin

  If edit3.text = '' Then

    ShowMessage('Поле данных пусто')

  Else

    Begin

      j:=1;

     for i := 1 to Length(edit3.Text) do

     begin

       b[i]:=StrToByte(edit3.Text[j]+edit3.Text[j+1]);

       j:=j+2;

     end;

     crc:= crc16(b, Length(edit3.Text));

     edit2.Text :=IntToHex(crc, 2);

    End;

End;

end.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Задание 2.

 

 

Листинг программы 
 
unit Unit1;

 

interface

 

uses

  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

  Dialogs, StdCtrls, CryptoAPI, HashTests;

 

type

  TForm1 = class(TForm)

    Memo1: TMemo;

    Memo2: TMemo;

    Button1: TButton;

    procedure Button1Click(Sender: TObject);

  private

    { Private declarations }

  public

    { Public declarations }

  end;

 

var

  Form1: TForm1;

 

implementation

 

{$R *.dfm}

 

procedure TForm1.Button1Click(Sender: TObject);

var

  input_text, hash:string;

begin

input_text:=Memo1.Text;

HashBuf(HASH_SHA1, @input_text[1], length(input_text), hash);

memo2.Lines.Clear;

memo2.Lines.Add(hash);

end;

 

end.

 

 

program Project1;

 

uses

  Forms,

  CryptoUtils in './HashLib!/CryptoUtils.pas',

  MD in './HashLib!/MD.pas',

  SHA in './HashLib!/SHA.pas',

  CRC in './HashLib!/CRC.pas',

  Tiger in './HashLib!/Tiger.pas',

  Adler in './HashLib!/Adler.pas',

  Haval in './HashLib!/Haval.pas',

  Gost in './HashLib!/Gost.pas',

  RIPEMD in './HashLib!/RIPEMD.pas',

  CryptoAPI in './HashLib!/CryptoAPI.pas',

  HashTests in './HashLib!/HashTests.pas',

  Unit1 in 'Unit1.pas' {Form1};

 

{$R *.res}

 

begin

  Application.Initialize;

  Application.CreateForm(TForm1, Form1);

  Application.Run;

end.


Информация о работе Контрольная работа по "Методам и средствам защиты информации"