Отчет по выполнению лабораторной работы №2 по дисциплине «Технологии и методы программирования»

Автор работы: Пользователь скрыл имя, 28 Ноября 2013 в 15:39, доклад

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

Шифрование по методу Вернама с гаммированием.

Вложенные файлы: 1 файл

Otchet_2_Галя.docx

— 426.77 Кб (Скачать файл)


 

ФЕДЕРАЛЬНОЕ АГЕНТСТВО ЖЕЛЕЗНОДОРОЖНОГО ТРАНСПОРТА

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

«ИРКУТСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ  ПУТЕЙ СООБЩЕНИЯ»

(ФГБОУ ВПО ИрГУПС)

Факультет «Управление  на транспорте и информационные технологии»

Кафедра «Информационные системы и защита информации»

 

 

 

 

 

 

ОТЧЁТ

По выполнению лабораторной работы №2

по дисциплине «Технологии и методы программирования»

 

 

 

 

 

 

 

 

 

 

 

 

 

                                                       Иркутск, 2013 г.

 

 

Лабораторная  работа №2

Тема: Шифрование по методу Вернама с гаммированием.

 

Код программы:

 

unit Unit1;

 

interface

 

uses

  Windows, Messages, SysUtils, Variants, Classes, Graphics,

  Controls, Forms, Dialogs, StdCtrls, Math;

 

type

  TForm1 = class(TForm)

    Label1: TLabel;

    Button1: TButton;

    OpenDialog1: TOpenDialog;

    SaveDialog1: TSaveDialog;

    Label2: TLabel;

    Button2: TButton;

    procedure Button1Click(Sender: TObject);

    procedure Button2Click(Sender: TObject);

  private

    { Private declarations }

  public

    { Public declarations }

  end;

 

var

  Form1: TForm1;

 

implementation

 

{$R *.dfm}

var

  kk: byte=0;

 

procedure NewKeys(var k0l, k0h: Int64; var keys_v: array of byte);

var

  q, r, A, B, m: Int64;

  p: ^Int64;

  i: integer;

begin

  A:= 124775813;

  B:= 1;

  m:= 4294967296;

  r:= 4294967296;

  q:=k0l*A;

  k0l:= q mod r;

  q:= q div r;

  k0h:= k0h*A + q;

  q:= k0l + b;

  k0l:= q mod r;

  k0h:= k0h + q div r;

  k0h:= k0h div m;

  k0l:= ((k0h mod m)*r + k0l) mod m;

  p:= @k0l;                // Указатель на младшую часть ключа

  for i:= 0 to 3 do

    keys_v[i]:= Ord((PChar(p)+i)^); // Символы по указателю в k0l

  p:= @k0h;                // Указатель на старшую часть ключа

  for i:= 0 to 3 do

    keys_v[i+4]:= Ord((PChar(p)+i)^); // Символы по указателю в k0h

//  q:=keys_v[0]+keys_v[1]*256 + keys_v[2]*256*256+keys_v[3]*256*256*256;

//  ShowMessage(IntToStr(q) +'  '+IntToStr(k0l));

//  q:=keys_v[4]+keys_v[5]*256 + keys_v[6]*256*256+keys_v[7]*256*256*256;

//  ShowMessage(IntToStr(q) +'  '+IntToStr(k0h));

end;

 

procedure TForm1.Button1Click(Sender: TObject);

var

  k0l, k0h, k1l, k1h, q: Int64;

  keys_v, buffer: array[0..7] of byte;

  i, j, k: integer;

  p: ^Int64;//pointer;

  f_open, f_save: File;

  f_key: TextFile;

  fo_name, fs_name: string;

  s: string;

  label decod;

begin

  if kk = 1 then goto decod;

// Генерация первого ключа

  randomize;

  q:= 2147483648;

  k0l:= RandomRange(-q, q-1);

  k0h:= RandomRange(-q, q-1);

// Сделать ключ в пределах  от 0 до 4294967295=2^32-1

  k0l:= k0l + 2147483648;

  k0h:= k0h + 2147483648;

//4294967296;

//  ShowMessage(IntToStr(q) + '  ' + IntToStr(k0l)+ '  ' + IntToStr(k0h));

//k0l:= 65+66*256+ 67*256*256 + 68*256*256*256;

//  ShowMessage(IntToStr(k0l));

  p:= @k0l;                // Указатель на младшую часть  ключа

  for i:= 0 to 3 do

    keys_v[i]:= Ord((PChar(p)+i)^); // Символы по указателю в k0l

  p:= @k0h;                // Указатель на старшую часть ключа

  for i:= 0 to 3 do

    keys_v[i+4]:= Ord((PChar(p)+i)^); // Символы по указателю в k0h

//  q:=keys_v[0]+keys_v[1]*256 + keys_v[2]*256*256+keys_v[3]*256*256*256;

//  ShowMessage(IntToStr(q) +'  '+IntToStr(k0l));

//  q:=keys_v[4]+keys_v[5]*256 + keys_v[6]*256*256+keys_v[7]*256*256*256;

//  ShowMessage(IntToStr(q) +'  '+IntToStr(k0h));

//  ShowMessage('Сравнение проведено');

  s:= 'Байты ключа записаны в файлe "keys.txt"';// + chr(13) + chr(10);

  for i:= 0 to 7 do

    s:= s + chr(13) + chr(10) + IntToStr(keys_v[i]);

  ShowMessage(s);

  AssignFile(f_key, 'keys.txt');

  Rewrite(f_key);

  writeln(f_key, s);

  CloseFile(f_key);

//  NewKeys(k0l, k0h, keys_v);

//  exit;

decod:

  ForceCurrentDirectory:= True; //Для  открытия диалогов в каталоге  проекта

  if kk = 1 then                //Когда будем расшифровывать

    begin

      OpenDialog1.Title:= 'Открыть ключевой файл';

      if OpenDialog1.Execute then

        AssignFile(f_key, OpenDialog1.FileName)

      else

        begin

          ShowMessage('Не задан файл с ключами');

          Exit;

        end;

      Reset(f_key);

      Readln(f_key);

      for i:=0 to 7 do

        readln(f_key, keys_v[i]);

      CloseFile(f_key);

      k0l:=keys_v[0]+keys_v[1]*256 + keys_v[2]*256*256+keys_v[3]*256*256*256;

      k0h:=keys_v[4]+keys_v[5]*256 + keys_v[6]*256*256+keys_v[7]*256*256*256;

    end;

  OpenDialog1.Title:= 'Открыть исходный файл';

  if OpenDialog1.Execute then

    begin

      fo_name:= OpenDialog1.FileName;

      SaveDialog1.Title:= 'Задать результирующий файл';

      if SaveDialog1.Execute then

        fs_name:= SaveDialog1.FileName

      else

        begin

          ShowMessage('Не задан исходный файл');

          Exit;

        end;

    end

  else

    begin

      ShowMessage('Не  задан файл с выходной информацией');

      Exit;

    end;

  Button1.Enabled:= False;

  Button2.Enabled:= False;

  Label2.Visible:= True;

  Form1.Refresh;

  AssignFile(f_open, fo_name);

  Reset(f_open,1); //Открытие файла-источника

  AssignFile(f_save, fs_name);

  ReWrite(f_save,1); //Открытие файла-результата

//   ShowMessage(fs_name);

 

  j:= 8; //Число считываемых  байтов

  i:= 8;

 

  BlockRead(f_open, buffer, j, i );

  while i > 0 do

    begin

      for k:=1 to i do

        buffer[k-1]:= buffer[k-1] xor keys_v[k-1];

      BlockWrite(f_save, buffer, i);

      BlockRead(f_open, buffer, j, i );

      NewKeys(k0l, k0h, keys_v);

    end;

  Button1.Enabled:= True;

  Button2.Enabled:= True;

  Label2.Visible:= False;

  CloseFile(f_open);

  CloseFile(f_save);

  kk:= 0;

end;

 

procedure TForm1.Button2Click(Sender: TObject);

begin

  kk:= 1;

  Button1Click(Self);

end;

 

end.

 

 

 


Информация о работе Отчет по выполнению лабораторной работы №2 по дисциплине «Технологии и методы программирования»