Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
OSNOVA.DOC
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
185.86 Кб
Скачать

4. Текст програми

Програма написана на мові програмування Object Pascal в середовищі прогармування Delphi.

unit Unit2;

interface

uses

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

ExtCtrls, ComCtrls, ToolWin, StdCtrls, Menus, StdActns, ActnList, ImgList,

Buttons, Mask, Spin;

Type {розділ описання використаних компонентів, що були розміщені на формі}

TMain = class(TForm)

StatusBar1: TStatusBar;

Panel1: TPanel;

10

ToolBar1: TToolBar;

ToolButton1, ToolButton2, ToolButton3, ToolButton4, ToolButton5, ToolButton6, ToolButton7, ToolButton8: TToolButton;

MainMenu1: TMainMenu;

N1, N2, N3, N4, N5, N6, N7, N8, N9, N10, N11, N12, N13, N14, N15, N16, N21, N31, N41, N51: TMenuItem;

GroupBox1: TGroupBox;

Memo1: TMemo;

RadioGroup1: TRadioGroup;

OpenDialog1: TOpenDialog;

SaveDialog1: TSaveDialog;

ActionList1: TActionList;

ImageList1: TImageList;

Open: TAction;

Save: TAction;

Close: TAction;

Saveas: TAction;

Exit: TAction;

EditCopy1: TEditCopy;

EditCut1: TEditCut;

EditDelete1: TEditDelete;

EditPaste1: TEditPaste;

EditSelectAll1: TEditSelectAll;

EditUndo1: TEditUndo;

Label1: TLabel;

SpinEdit1: TSpinEdit;

Button1: TButton;

Button2: TButton;

BitBtn1: TBitBtn;

Shifr: TAction;

Deshifr: TAction;

ToolButton9: TToolButton;

procedure FormClose(Sender: TObject; var Action: TCloseAction);

procedure OpenExecute(Sender: TObject); {розділ описання процедур обробки подій}

procedure CloseExecute(Sender: TObject);

procedure ExitExecute(Sender: TObject);

procedure ShifrExecute(Sender: TObject);

procedure DeshifrExecute(Sender: TObject);

procedure SaveExecute(Sender: TObject);

procedure SaveasExecute(Sender: TObject);

procedure N13Click(Sender: TObject);

procedure N12Click(Sender: TObject);

procedure N16Click(Sender: TObject);

procedure N14Click(Sender: TObject);

procedure N15Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

11

var

Main: TMain;

str:string;

fname:string;

implementation

uses Unit1;

{$R *.DFM}

procedure TMain.FormClose(Sender: TObject; var Action: TCloseAction); {описання процедури обробки події закриття форми}

begin

start.close;

end;

procedure TMain.OpenExecute(Sender: TObject); {описання процедури обробки події, яка виникає при натисненні командної кнопки “відкрити файл”}

var f:textfile;

s:string;

begin

if OpenDialog1.Execute then

begin

fname:=OpenDialog1.FileName;

AssignFile(F, OpenDialog1.FileName);

Reset(F);

memo1.lines.clear;

while not eof(f) do

begin

readln(f,s);

memo1.lines.add(s);

end;

CloseFile(F);

end;

end;

procedure TMain.CloseExecute(Sender: TObject); {описання процедури обробки події, яка виникає при натисненні командної кнопки “закрити файл”}

begin

memo1.lines.clear;

end;

procedure TMain.ExitExecute(Sender: TObject); {описання процедури обробки події закриття головної форми}

begin

messagebeep(0);

if MessageDlg('Ви справді хочете вийти ?',mtConfirmation,

[mbYes, mbNo], 0) = mrYes then

start.close;

end;

12

function xora(key:string;text:string):string; {описання процедури, що виконує шифрування\дешифрування текстової інформації text, використовуючи ключ key, XOR- методом }

var longkey,res:string;

i : integer;

toto: char;

begin

res:='';longkey:='';

for i:=0 to (length(text) div length(key)) do

longkey:=longkey+key;

for i:=1 to length(text) do

begin

toto := chr((ord(text[i]) XOR ord(longkey[i])));

res:=res + toto;

end;

xora:=res;

end;

procedure TMain.ShifrExecute(Sender: TObject); {описання процедури обробки події, яка виникає при натисненні командної кнопки “виконати шифрування”}

//--------спеціальна функція, яка виконує алгоритм перестановки (шифрування)

function shifr(code:string;ci:integer):string;

var nove,nov:string;

i,n,ni:integer;

begin

nove:='';

for i:=1 to length(code) do nove:=nove+'.';

for i:=1 to length(code) do if code[i]='.' then code[i]:='@';

n:=1;ni:=1;nov:=nove;

for i:=1 to length(code) do

begin

while n<ci do

begin

if ni>=length(nove) then ni:=ni-length(nove)+1 else inc(ni);

if code[ni]<>'.' then inc(n);

end;

n:=1;

nove[i]:=code[ni];code[ni]:='.';

while (code[ni]='.') and (nov<>code) do

if ni>=length(nove) then ni:=ni-length(nove)+1 else inc(ni);

end;

for i:=1 to length(nove) do if nove[i]='@' then nove[i]:='.';

shifr:=nove;

end;

//------------------------------------------------ власне сама процедура

var i,j:integer;

choise,key:integer; // в залежності від вибору алгоритму, виконується той, чи інший

keys:string; // алгоритм, результат виконання виводиться на компоненту

begin // memo1 з використанням властивості Lines.strings

key:=spinedit1.value;

13

choise:=main.RadioGroup1.ItemIndex;

case choise of

0:begin // виконання алгоритму – шифрування методом Цезаря

for j:=0 to memo1.lines.Count-1 do

begin

str:=memo1.lines.strings[j];

for i:=1 to length(str) do

begin

if (ord(str[i])>=32) then str[i]:=chr(ord(str[i])+key mod 255);

end;

memo1.lines.strings[j]:=str;

end;

end;

1: // виконання алгоритму – шифрування методом перестановки

begin

key:=spinedit1.value;

for j:=0 to memo1.lines.Count-1 do

begin

memo1.lines.strings[j]:=(shifr(memo1.lines.strings[j],key));

end;

end;

2:begin //виконання алгоритму – шифрування методом гамування

key:=spinedit1.value;

for j:=0 to memo1.lines.Count-1 do

begin

memo1.lines.strings[j]:=(encript(key,memo1.lines.strings[j]));

end;

end;

3:begin // виконання алгоритму – шифрування методом XOR

keys:=inttostr(spinedit1.value);

for j:=0 to memo1.lines.Count-1 do

begin

memo1.lines.strings[j]:=(xora(keys,memo1.lines.strings[j]));

end;

end;

else end;

end;

procedure TMain.DeshifrExecute(Sender: TObject); {описання процедури обробки події, яка виникає при натисненні командної кнопки “виконати дешифрування”}

//--------спеціальна функція, яка виконує алгоритм перестановки (дешифрування)

function deshifr(code:string;ci:integer):string;

var nove:string;

i,n,ni:integer;

begin

nove:='';

for i:=1 to length(code) do nove:=nove+'.';

for i:=1 to length(code) do if code[i]='.' then code[i]:='@';

n:=1;ni:=1;

for i:=1 to length(code) do

14

begin

while n<ci do

begin

if ni>=length(nove) then ni:=ni-length(nove)+1 else inc(ni);

if nove[ni]='.' then inc(n);

end;

n:=1;

nove[ni]:=code[i];

if i<>length(nove) then

begin

while nove[ni]<>'.' do

if ni>=length(nove) then ni:=ni-length(nove)+1 else inc(ni);

end;

end;

for i:=1 to length(nove) do if nove[i]='@' then nove[i]:='.';

deshifr:=nove;

end;

//------------------------------------------власне і є сама процедура

var choise,key,j,i:integer;

keys:string;

begin

key:=spinedit1.value;

choise:=main.RadioGroup1.ItemIndex;

case choise of

0:begin // виконання алгоритму – дешифрування методом Цезаря

for j:=0 to memo1.lines.Count-1 do

begin

str:=memo1.lines.strings[j];

for i:=1 to length(str)+1 do

begin

if (ord(str[i])>=32)then str[i]:=chr(ord(str[i])-key mod 255);

end;

memo1.lines.strings[j]:=str;

end;

end;

1:begin // виконання алгоритму – дешифрування методом перестановки

key:=spinedit1.value;

for j:=0 to memo1.lines.Count-1 do

begin

memo1.lines.strings[j]:=(deshifr(memo1.lines.strings[j],key));

end;

end;

2:begin //виконання алгоритму – дешифрування методом гамування

key:=spinedit1.value;

for j:=0 to memo1.lines.Count-1 do

begin

memo1.lines.strings[j]:=(encript(key,memo1.lines.strings[j]));

end;

end;

3:begin // виконання алгоритму – дешифрування методом XOR

15

keys:=inttostr(spinedit1.value);

for j:=0 to memo1.lines.Count-1 do

begin

memo1.lines.strings[j]:=(xora(keys,memo1.lines.strings[j]));

end;

end;

else

end;

end;

procedure TMain.SaveExecute(Sender: TObject); {описання процедури обробки події, яка виникає при натисненні командної кнопки “ зберегти файл ”}

var f:textfile;

i:integer;

begin

if fname<>'' then

begin

AssignFile(F,FName);

Rewrite(F);

for i:=0 to memo1.lines.count-1 do

begin

writeln(f,memo1.lines.strings[i]);

end;

CloseFile(F);

end;

end;

procedure TMain.SaveasExecute(Sender: TObject); {описання процедури обробки події, яка виникає при натисненні командної кнопки “ зберегти файл ”}

var f:textfile;

i:integer;

begin

if saveDialog1.Execute then

begin

AssignFile(F, SaveDialog1.FileName);

Rewrite(F);

for i:=0 to memo1.lines.count-1 do

begin

writeln(f,memo1.lines.strings[i]);

end;

CloseFile(F);

end;

end;

procedure TMain.N15Click(Sender: TObject); {процедура виведення інформації про програму }

begin

Application.MessageBox(

' Курсова робота на тему: "Алгоритми шифрування та дешифрування текстової

16

інформації". ',

' *** Про програму *** ',

MB_OK);

end;

end.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]