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


 

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

50706. Определение фокусных расстояний собирающей и рассеивающей линз и основных характеристик оптических систем, составленных из этих линз 70 KB
  Цель работы: Определение фокусных расстояний собирающей и рассеивающей линз и основных характеристик оптических систем составленных из этих линз. Приборы и принадлежности: источник света со щелью в виде стрелки; экран; рейтер и масштабная линейка; набор линз две собирающих и одна рассеивающая; два штатива для установки линз. Ход работы: С помощью метода Бесселя рассчитать фокусные расстояния и оптические силы двух собирающих линз и одной рассеивающей.После этого измеряем расстояние от источника до линзыd1 и...
50707. Изучение распределения Гаусса и двумерного распределения Максвелла на механической модели 113 KB
  Цель работы: изучение законов нормального распределения случайных величин и двумерного распределения Максвелла. Вывод: в данной работе мы получили экспериментальные и теоретические графики распределения случайных величин которые качественным образом показывают распределение скоростей молекул идеального газа.
50708. Определение коэффициента поверхностного натяжения по высоте подъёма жидкости в капиллярных трубках 25 KB
  Тема: Определение коэффициента поверхностного натяжения по высоте подъёма жидкости в капиллярных трубках. Цель работы: определить коэффициента поверхностного натяжения. Вывод: В этой работе мы с помощью четырёх капиллярных трубок нашли два значения коэффициента поверхностного натяжения 1 = 745  178103 Н м и 2 = 644  218103 Н м.
50709. Исследование напряженного состояния тонкостенной цилиндрической оболочки 282 KB
  В таких оболочках действуют кольцевые в первом главном сечении и меридиональные напряжения во втором главном сечении которые могут определиться через внутренние силы и моменты: ; 1 где S –меридиональные силы; Т – кольцевые силы; толщина стенки; Z – координата точки в которой определяем напряжение; Z изменяется от до . Из формулы 1 следует что напряжения распределены по толщине стенки по линейному закону достигая наибольших значений на внутренней или нагруженной поверхностях опор ; 2 В этих формулах если...
50710. ПОКУДОВА ДОБОВИХ ГРАФІКІВ НАВАНТАЖЕННЯ ЗА ДАНИМИ ОБСТЕЖЕННЯ ГРУПИ КОМУНАЛЬНО-ПОБУТОВИХ ЕЛЕКТРОПРИЙМАЧІВ ТА ВИЗНАЧЕННЯ РОЗРАХУНКОВОГО МАКСИМАЛЬНОГО НАВАНТАЖЕННЯ І ОСНОВНИХ ХАРАКТЕРИСТИК ГРАФІКА 191 KB
  Натурний експеримент Мета роботи. Побудова добового графіку навантаження комунально-побутового споживача житлового будинку квартири тощо на основі обстеження його електроприймачів та обчислення розрахункового максимального навантаження і основних числових характеристик графіка. ТЕОРЕТИЧНІ ВІДОМОСТІ Електричне навантаження є основним...
50711. ИССЛЕДОВАНИЕ СЛОЖНОЙ ЦЕПИ ПОСТОЯННОГО ТОКА 126 KB
  Выполнить опытную проверку принципа наложения. Принцип наложения формулируется следующим образом: ток в Кой ветви равен алгебраической сумме токов вызываемых в этой ветви каждой из э. Принцип наложения используется в методе расчета получившем название метода наложения. Опытная проверка принципа наложения производится в следующем порядке: а в цепи собранной при выполнении пункта 1 отключается один из источников э.
50712. Имя существительное как части речи 72.5 KB
  Имя существительное – это самостоятельная часть речи, имеющая категориальное значение предметности и выражающая его в несловоизменительных категориях рода и одушевленности
50713. Ознайомлення з приладами та пристроями для вимірювання витрат енергоносіїв 132 KB
  Витрата рідини що вимірюється в одиницях обєму називається обємною Vτ наприклад м3 с а в одиницях мас масовою Мτ кг с. Звязок між ними Мτ= Vτρ де ρ кг м3 густина рідини. Обєм рідини як правило не є одиницею кількості речовини оскільки для однієї і тієї ж кількості рідини він залежить від температури і тиску або питомого обєму. За необхідності із цього поняття виокремлюють краплинні рідини і гази.