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


 

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

1716. Реализация линейных алгоритмов на языке Visual Basic for Aplications (VBA) 64.26 KB
  Отличие VBA oт других языков программирования состоит в том, что программа на VBA сохраняется в одном файле с документами соответствующих приложений, а не в отдельном текстовом файле.
1717. Алгоритмизация и программирование разветвляющихся алгоритмов 190.76 KB
  Логические выражения. Условный оператор If. Вывод тестов в ячейки рабочего листа. Логические операции. Выполнение оператора.
1718. Алгоритмизация и программирование циклических алгоритмов 112.5 KB
  Оператор цикла с предусловием While Wend. Повторяющаяся последовательность действий (в программе операторов). Оператор цикла For Next. Форматирование значений данных. Табулирование функций.
1719. Основы работы в табличном процессоре Microsoft Excel 178.39 KB
  Рабочие книги и рабочие листы. Создание таблиц, Ввод данных. Использование ссылок в формулах. Автоматическое заполнение ячеек. Команды отмены и повторения. Редактирование данных в ячейке. Изменение размеров строки или столбца.
1720. ГЛОБАЛИЗАЦИЯ КУЛЬТУРЫ И СПЕЦИФИКА ЕЕ ПРОЯВЛЕНИЯ В РОССИИ 1010.13 KB
  Теоретико-методологические основы анализа глобализации культуры. Специфика глобализационных процессов в Российской культуре. Метаобразование как новый качественный этап глобализации образования. Глобализация образования как феномен инновационной культуры.
1721. Согласование экспертных оценок при построении интегральных индикаторов 1006.32 KB
  Построение интегральных индикаторов, кластеризация объектов при построении индикаторов, нахождение алгоритма соглафования, предварительный анализ и кластеризация.
1722. Проектування фільтра на ПАХ 192.01 KB
  Ознайомлення з будовою, принципом дії і основними розрахунковими співвідношеннями для фільтрів на ПАХ, а також набути навичок їх проектування.
1723. Алмаз и его свойства 1.12 MB
  Бриллиант идеальной огранки. Идеальная огранка круглого бриллианта по Толковскому. Схема предпологаемого технологического процесса. Краткая характеристика операций технологического процесса. Анализ потерь по каждой операции. Технологическая инструкционная карта огранки.
1724. Финансовый анализ и контроль на предприятии 1.16 MB
  Роль финансового анализа в принятии управленческих решений. Виды финансового анализа и схема его проведения. Методы, приемы и система показателей при проведении финансового анализа Цели, задачи, функции и виды финансового контроля на предприятия. Контроль учредительных документов и уставного капитала предприятия. Решение задач финансового менеджмента на основе материалов контроля