
- •Мета I завдання курсової роботи
- •1. Тематика курсових робіт
- •1.1. Вибір теми курсової роботи
- •1.2. Приклади тем курсових робіт
- •2. Вимоги до курсової роботи
- •2.1. Оформлення курсової роботи
- •2.2. Вимоги до розробки програми
- •З. Захист курсової роботи
- •4. Приклад типової курсової роботи
- •4.1. Основні етапи виконання курсової роботи
- •Розробка і опис алгоритму розв’язання задачі.
- •Кафедра прикладної математики Курсова робота
- •1. Шифрування - метод захисту інформації
- •2. Класифікація алгоритмів шифрування
- •2.1 Класифікація алгоритмів
- •2.2. Симетричні потокові алгоритми шифрування
- •2.3. Симетричні, блокові алгоритми шифрування
- •2.4. Асиметричні алгоритми шифрування
- •3. Реалізація алгоритмів шифрування
- •4. Текст програми
- •5. Інструкція користувача
- •6. Тестовий приклад
- •Висновки
- •Література
- •Література
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.