51305

Научиться составлять программы шифрования текста, основываясь на принципе взбивания

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

Информатика, кибернетика и программирование

Ход работы Ознакомиться с теоретической частью данной работы. Составить алгоритм программы шифрования по принципу взбивания. Составить программу шифрования по соответствующему заданию.

Русский

2014-02-09

418 KB

3 чел.

Цель работы: Научиться составлять программы шифрования текста, основываясь на принципе взбивания.

Ход работы

  1.  Ознакомиться с теоретической частью данной работы.
  2.  Составить алгоритм программы шифрования по принципу взбивания.
  3.  Составить программу шифрования по соответствующему заданию.
  4.  Составить алгоритм программы дешифрования по принципу взбивания.
  5.  Составить программу дешифрования по соответствующему заданию.
  6.  Составить отчет по проделанной работе.
  7.  Защитить работу.

Скриншот программы

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

unit Unit1;

interface

uses

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

 Dialogs, StdCtrls, Buttons,Math;

type

 TForm1 = class(TForm)

   Memo1: TMemo;

   Label2: TLabel;

   Memo3: TMemo;

   Label4: TLabel;

   BitBtn2: TBitBtn;

   BitBtn1: TBitBtn;

   function cript(x:string):string;

   function Uncript(x:string):string;

   procedure BitBtn1Click(Sender: TObject);

   procedure BitBtn2Click(Sender: TObject);

   procedure FormCreate(Sender: TObject);

     //замена по блокам по правилу

 private

   { Private declarations }

 public

   { Public declarations }

 end;

var

 Form1: TForm1;

 i,j:integer;

implementation

{$R *.dfm}

//Шифр Des  

function TForm1.cript(x: string): string;

 const

xorblok:array[0..1] of char=('0','1');

boolblok:array[0..1] of boolean=(false,true);

 var

stroka,resul:string;

//===========================================================================

//Функция возвращает код символа в двоичном формате

//===========================================================================

function Bin(x1: Integer): string;

const t:array[0..1] of char = ('0','1');

var res:string;

d:0..1;

begin

res:='';

while (x1<>0) do

begin

d:=x1 mod 2 ;

res:=t[d]+res;

x1:=x1 div 2 ;

end;

while length(res)<>8 do

res:='0'+res;

Bin:=res;

end;

//===========================================================================

//Функция возврата символа по двоичному коду

//===========================================================================

Function unbin(y1:string):string;

var resul,i1:integer;

mess:string;

begin

resul:=0;

i:=1;

i1:=1;

while i<length(y1)+1 do

begin

if y1[i]='1' then

resul:=resul+floor(power(2,8-i1));

if i1=8 then

begin

mess:=mess+chr(resul);

resul:=0;

i1:=0;

end;

i:=i+1;

i1:=i1+1;

end;

unbin:=mess;

end;

//===========================================================================

//Функция Шифр-замена(Цезарь)

//===========================================================================

Function cezarcript(messag:string):string;

Var

i1:integer;

begin

i1:=1;

while i1<>length(messag)+1 do

begin

if ord(messag[i1])-3<0 then

messag[i1]:=chr(ord(messag[i1])-3+255)

else

messag[i1]:=chr(ord(messag[i1])-3);

i1:=i1+1;

end;

cezarcript:=messag;

end;

//Конец шифра Цезаря

//===========================================================================

//Шифр перестановки(Обратное написание)

//===========================================================================

function reverscript(messag:string):string;

var i1:integer;

mess:string;

begin

i1:=1;

while i1<length(messag)+1 do

begin

mess:=messag[i1]+mess;

inc(i1);

end;

reverscript:=mess;

end;

//===========================================================================

//Процедура шифрование

//===========================================================================

begin

//===========================================================================

// производит взбитие символов

//===========================================================================

 //добавление до 8 символов

 while (length(x) mod 8)<>0 do

begin

 x:=x+' ';

end;

 //перевод сообщения в 2 систему вызывая процедуру

stroka:='';

for i:=1 to length(x) do

stroka:=stroka+bin(Ord(x[i]));

x:=stroka;

stroka:='';

//запись в строку вторую половину текста

i:=0;

i:=(length(x) div 2)+1;

while i<>length(x)+1 do

begin

stroka:=stroka+x[i];

 i:=i+1;

end;

//запись в строку первую xor вторую

i:=1;

j:=length(x) div 2+1;

while i<>(length(x) div 2)+1 do

begin

 if  boolblok[strtoint(x[i])] xor  boolblok[strtoint(x[j])] then

 stroka:=stroka+'1' else

 stroka:=stroka+'0';

 i:=i+1;

 j:=j+1;

end;

stroka:=unbin(stroka);

//Конёц взбитию

//===========================================================================

//Шифр цезаря + Шифр перестановки(Обратное написание)

//===========================================================================

stroka:=CezarCript(stroka);

stroka:=Reverscript(stroka);

//===========================================================================

cript:=stroka;

//Конец шифрованию

//===========================================================================

end;

//расшифровка шифра DES  

function TForm1.Uncript(x:string): string;

 const

xorblok:array[0..1] of char=('0','1');

boolblok:array[0..1] of boolean=(false,true);

 var

Messagecount:integer;

stroka,strokaresul:string;

//===========================================================================

//Функция Расшифровки-замена(Цезарь)

//===========================================================================

Function cezaruncript(messag:string):string;

Var

i1:integer;

stet:string;

begin

i1:=1;

while i1<>length(messag)+1 do

begin

if (ord(messag[i1])+3)<=255 then

begin

stet:=stet+chr(ord(messag[i1])+3);

end

else

begin

stet:=stet+chr(ord(messag[i1])+3-255);

end;

inc(i1);

end;

cezaruncript:=stet;

end;

//Конец расщифровки Цезаря

//===========================================================================

//Расшифровка перестановки(Обратное написание)

//===========================================================================

function reversuncript(messag:string):string;

var i1:integer;

mess:string;

begin

i1:=1;

while i1<length(messag)+1 do

begin

mess:=messag[i1]+mess;

inc(i1);

end;

reversuncript:=mess;

end;

//Конец Шифр перестановки(Обратное написание)

//===========================================================================

//===========================================================================

//Функция возвращает код символа в двоичном формате

//===========================================================================

function Bin(x1: Integer): string;

const t:array[0..1] of char = ('0','1');

var res:string;

d:0..1;

begin

res:='';

while (x1<>0) do

begin

d:=x1 mod 2 ;

res:=t[d]+res;

x1:=x1 div 2 ;

end;

while length(res)<>8 do

res:='0'+res;

Bin:=res;

end;

//===========================================================================

//Функция возврата символа по двоичному коду

//===========================================================================

Function unbin(y1:string):string;

var resul,i1:integer;

mess:string;

begin

resul:=0;

i:=1;

i1:=1;

while i<length(y1)+1 do

begin

if y1[i]='1' then

resul:=resul+floor(power(2,8-i1));

if i1=8 then

begin

mess:=mess+chr(resul);

resul:=0;

i1:=0;

end;

i:=i+1;

i1:=i1+1;

end;

unbin:=mess;

end;

//===========================================================================

begin

//===========================================================================

//первичная расшифровка перестановки и замены

//===========================================================================

x:=reversuncript(x);

x:=cezaruncript(x);

//===========================================================================

//Перевод в двоичный код

stroka:='';

for i:=1 to length(x) do

begin

stroka:=stroka+bin(Ord(x[i]));

end;

x:= stroka;

//Проведём операцию xor

stroka:='';

i:=1;

j:=length(x) div 2+1;

while i<>(length(x) div 2)+1 do

begin

 if  boolblok[strtoint(x[i])] xor  boolblok[strtoint(x[j])] then

 stroka:=stroka+'1' else

 stroka:=stroka+'0';

 i:=i+1;

 j:=j+1;

end;

strokaresul:=unbin(stroka);

//запись в строку вторую половину текста

stroka:='';

i:=1;

while i<>(length(x) div 2)+1 do

begin

stroka:=stroka+x[i];

i:=i+1;

end;

strokaresul:=strokaresul+unbin(stroka);

uncript:=strokaresul;

end;

procedure TForm1.BitBtn2Click(Sender: TObject);

begin

memo1.Text:=uncript(memo3.Text);

end;

procedure TForm1.BitBtn1Click(Sender: TObject);

begin

memo3.Text:=cript(memo1.text);

end;

procedure TForm1.FormCreate(Sender: TObject);

begin

memo1.Text:='передача';

end;

end.


Изм.

Лист

№ докум.

Подпись

Дата

Лист

1

абораторная работа №5

Разраб.

Карецкий

Провер.

Смулаковский

Реценз.

Н. Контр.

Утверд.

Комбинированные шифры и стандарт DES (Data Encryption Standart)

Лит.

Листов

6

       КОГУ 59 П-3

2

Изм

Лист

№ докум.

Подп

Дата

Лист

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

3

Изм

Лист

№ докум.

Подп

Дата

Лист

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

4

Изм

Лист

№ докум.

Подп

Дата

Лист

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

5

Изм

Лист

№ докум.

Подп

Дата

Лист

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

6

Изм

Лист

№ докум.

Подп

Дата

Лист

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

7

Изм

Лист

№ докум.

Подп

Дата

Лист

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


 

А также другие работы, которые могут Вас заинтересовать

62793. Аппликация из природного материала 16.55 KB
  Приклеиваем траву которую мы вырезали так чтобы она была чуть ниже середины картона чтобы у нас оставалось место для нашей речки. Волнообразно приклеиваем нитки к картону. Приклеиваем. Приклеиваем по середине нашей речке.
62794. Работа с бумагами и картоном. Аппликация «Снеговик» 46.71 KB
  Цели урока: Образовательная: создать условия навыки работы с бумагой и картоном грамотного использования инструментов. 4 1 Оформление красной доски: 2 3 Тема урока Наглядные материалы ЭКГ Домашнее задание...
62797. Изготовление поздравительной открытки к 8 марта 12.91 KB
  Цель: изготовить открытку Задачи: формировать эстетический вкус развивать творческие способности воспитывать нежное отношение к маме Оборудование: альбомный лист, цветная бумага (зелёная, жёлтая, оранжевая, красная, розовая, клей, ножницы, карандаш).
62799. Лепка грибов из пластилина 52.58 KB
  Чем же люди занимаются осенью собирают грибы Сегодня на уроке мы будем лепить грибы из пластилина и соберем свое собственное лукошко осенних грибов. Какие грибы вы знаете ответы детей На какие 2 группы можно разделить грибы съедобные несъедобные...