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


 

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

8626. Философия Аристотеля. Аристотель кается перед Платоном 92.5 KB
  Философия Аристотеля Вопросы: 1. Что Аристотель называет началом, которым «должен владеть всякий, кто постигает какую-либо вещь»? При помощи какого метода строит свою философию Аристотель? 2. В чём состоит критика Аристотелем Платоновской теории иде...
8627. Философия Средних веков (богословие) и эпохи Возрождения 130 KB
  Философия Средних веков (богословие) и эпохи Возрождения Вопросы: 1. В чём отличие богословия от философского мышления? 2. Какие ступени познания выделяет Плотин? В чём отличие учения Плотина от богословия? 3. Какие два монотеизма противостоят друг ...
8628. Философия Р.Декарта и Ф.Бэкона 249 KB
  Философия Р.Декарта и Ф.Бэкона Р.Декарт РАЗЫСКАНИЕ ИСТИНЫ ПОСРЕДСТВОМ ЕСТЕСТВЕННОГО СВЕТА, который сам по себе, не прибегая к содействию религии или философии, определяет мнения, кои должен иметь добропорядочный человек относительно всех предметов, ...
8629. Философия И.Канта 102.5 KB
  Философия И.Канта Вопросы: 1. В чём отличие эмпирических знаний от априорных? 2. Какие признаки априорного знания выделяет И.Кант? Какова задача философии, по Канту? Чем обусловлена постановка задачи? 3. Какую классификацию суждений предлагает Кант?...
8630. Русская религиозная философия 19-20 веков 68 KB
  Русская религиозная философия 19-20 вв. Вопросы: 1. Какой должна стать русская философия? С каким предметом она должна иметь дело? 2. Как И.Ильин аргументирует необходимость отказа от намеренного выдумывания философских систем? 3. Каков закон иссл...
8631. Сознание как философская категория 56.5 KB
  Сознание как философская категория Вопросы: 1. Какие правила мышления выделяет И.Кант? Как понимается мышление в европейской традиции? 2. Что такое сознание? Как формулирует своё предназначение человек сознающий? 3. Каковы свойства гармонии, носител...
8632. Проблема познания в философии 105 KB
  В каком смысле акты научного познания - свободные явления. Можно ли рассматривать знание законов как актуализацию готовых смыслов и сущностей. Можно ли рассматривать знание как превращение...
8633. Личность как философская категория 158.5 KB
  Человек бесчувственный. За что критикует К.Льюис авторов одного из английских учебников для старших классов. Какие следствия имеют взгляды данных авторов. Какая мыслительная традиция...
8634. Философия общества. Соотношение понятий культура и цивилизация 180.5 KB
  Философия общества. Соотношение понятий культура и цивилизация. Изложите критику социального материализма. Изложите критику социального психологизма. Каковы сущностные признаки общественного явления...