Компонент программного комплекса для шифрования/дешифрования данных

Введение



В настоящее время существует огромное количество разнообразных программ шифрования/дешифрования . Они в значительной мере позволяют повысить степень защищенности текстовых данных.

В данном проекте представлен компонент программного комплекса для шифрования/дешифрования данных, который может быть использован как в домашних, так и в коммерческих условиях.


Постановка задачи



Требуется разработать программу позволяющую реализовать шифрование и дешифрование текстового файла методом замены и методом перестановки (не менее двух способов)


2. Требования к программе



2.1 Требования к функциональным характеристикам



Система должна обеспечивать возможность выполнения следующих функций:

Ввод исходных данных (с клавиатуры, из файла)

Выбор алгоритма шифрования/дешифрования

Сохранение зашифрованных данных 

Дешифрование данных по исходному алгоритму шифрования

Сохранение дешифрованных данных в файл



2.2 Требования к надежности



Обеспечить целостность хранимой информации.



2.3 Требования к составу и параметрам технических средств



Система должна работать на IBM-совместимых персональных компьютерах. Минимальная конфигурация: тип процессора – Pentium и выше; объем ОЗУ – 32 Мб и выше.



2.4 Требования к информационной и программной совместимости



Система должна работать под управлением операционных систем семейства Windows, реализующих Win32 API.


3. Проектирование



Выбор архитектуры программного обеспечения

Этот проект имеет однопользовательскую архитектуру, так как рассчитан на работу с одним пользователем.

Выбор языка и среды программирования

В качестве среды программирования был использован Borland Delphi 7, основанный на языке Object Pascal. Он был выбран, потому что он реализует возможность использования визуального программирования, что очень важно для данного проекта. Так же его могут использовать программисты со средним уровнем подготовки.

Delphi 7 позволяет создавать массивы объектов, имеет встроенные функции преобразования данных, позволяет работать с файлами, графическими элементами и создавать многооконный режим.

Выбор способа организации входных и выходных данных

1.Представление в оперативной памяти

Представление данных в оперативной памяти для программы «DQ_decoder» осуществляется через переменные(тип переменных указан в Приложении 2.)

Входные данные:

Ввод исходного текста с клавиатуры

Чтение текста из файла

Выходные данные:

Кодированный текст в диалоговом окне

2.Представление во внешней памяти

Выходные данные во внешней памяти в программе представлены в виде текстового файла. Имя выходного файла для программы «DQ_decoder» формируется самим пользователем.

3.Структурная схема программного продукта

Структурной называют схему отражающую состав и взаимодействие по уравнению частей разрабатываемого ПО.


4. Алгоритм представления задачи

шифрование программа текстовый замена

1)Ввод пользовательских данных;

2)Выбор способа шифрования/дешифрования;

3)Шифрование/дешифрование;

4)Вывод результата;

5)Сохранение результата в файл;


5. Проектирование пользовательского интерфейса



Пользовательский интерфейс представляет собой совокупность программных и аппаратных средств, обеспечивающих взаимодействие пользователя с компьютером.

Интерфейс реализован в виде интерфейса-меню.(Рис. 4) Позволяет пользователю выбирать необходимые операции из специального списка, выводимого программой. 



5.1 Тестирование в нормальных условиях



Тип контроля программы: ручной контроль. 

Результаты предоставлены в Табл.1



Номер теста

Входные данные

Полученный результат





Зашифровано

Расшифровано

1.Шифрование с паролем(123)

Hello, World!

zќћў, Љ ¤џ•S

Hello, World!

2.Шифрование перестановкой 1

Hello, World!

п2:@=%оъ=::3

Hello, World!

3.Шифрование перестановкой 2

Hello, World!

щ<DJG/шGDD=

Hello, World!



В результате тестирования было установлено , что программа работает исправно и выполняет возложенные на нее функции правильно.



5.2 Общие сведения о программном продукте



Программа «DQ_decoder» позволяет шифровать/дешифровать текстовые данные тремя способами (шифрование с паролем, шифрование перестановкой 1 , шифрование перестановкой 2). Исходные данные можно вводить с клавиатуры, а также из внешнего файла. Результат можно сохранить во внешний текстовый файл.

Предполагается что программа будет использоваться преподавателями для кодирования данных, предназначенных в качестве правильных ответов в тестах.

Для работы с программой необходимо скопировать ее на жесткий диск (необходимо 4652 кб места на жестком диске) либо запускать с исходного носителя.



5.3 Описание запуска



Запустить программу можно несколькими способами:

Двойным щелчком по иконке «DQ_decoder»

Выбрать и запустить из меню «Пуск» пункт «Выполнить» и прописать полный путь до приложения (например D:\ProgramFiles\DQ_decoder\DQ_decoder.exe)

Нажать правой кнопкой мыши на иконке «DQ_decoder», и выбрать «Открыть».



5.4 Интерфейс



При загрузке программы «DQ_decoder» на экране появится окно. Это окно будет иметь вид, представленный на Рис. 6

Кнопки

«Кодировать» позволяет закодировать исходный текст по заданному алгоритму

«Декодировать» позволяет декодировать текст по заданному алгоритму

Меню

Окно программы имеет следующее меню, которое содержит вкладки:

Файл. В этой закладке есть пункты «Открыть», «Сохранить как», «Выход» с соответствующими функциями.

Справка. В этой закладке есть пункты «О программе», «Об авторе», «Инструкция» с соответствующими функциями.

Способ завершения работы

Работа программы может быть завершена следующими способами:

Стандартный способ принятый в OS Windows

Нажав на кнопку «Файл» - > «Выход».


Заключение



Данная программа может выполнять все поставленные перед ней задачи в соответствие с техническим заданием. В дальнейшем возможно расширение возможностей этой программы. Можно добавить большее количество способов шифрования, а так же расширить пользовательский интерфейс. Предоставленная версия программы может быть использована в любом учебном заведении в качестве учебного пособия. Интерфейс программы интуитивно понятен, что позволит пользователю в короткий срок освоить работу с программой.


Список литературы



1. Государственный образовательный стандарт по направлению 654600 "Информатика и вычислительная техника" специальности 230105 "Программное обеспечение вычислительной техники и автоматизированных систем".

2. ГОСТ 2.105-79 Единая система конструкторской документации. Общие требования к текстовым документам.

3.ГОСТ 2.105-95 Единая система конструкторской документации. Общие требования к текстовым документам.

4. ГОСТ 7.1-84 Система стандартов по информации, библиотечному и издательскому делу. Библиографическое описание документа. Общие требования и правила составления.

5. ГОСТ 7.32-2001 Система стандартов по информации, библиотечному и издательскому делу. Отчет о научно-исследовательской работе. Структура и правила оформления.

6. Курсовое проектирование: Учебно-методическое пособие./ Живодерова В.В., - Дмитров: ДПК, 2005. - 67 с.

7. Интернет ресурсы (google.ru).


Приложение 



unit Unit1;

interface

uses

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

Dialogs, StdCtrls, ComCtrls, Menus;

type

TForm1 = class(TForm)

Button1: TButton;

Button2: TButton;

OpenDialog1: TOpenDialog;

SaveDialog1: TSaveDialog;

Edit1: TEdit;

GroupBox1: TGroupBox;

GroupBox2: TGroupBox;

GroupBox3: TGroupBox;

Label3: TLabel;

Label4: TLabel;

Label5: TLabel;

RadioButton1: TRadioButton;

RadioButton2: TRadioButton;

RadioButton3: TRadioButton;

Button3: TButton;

Button4: TButton;

Button5: TButton;

Button6: TButton;

MainMenu1: TMainMenu;

N1: TMenuItem;

N2: TMenuItem;

N3: TMenuItem;

N4: TMenuItem;

N5: TMenuItem;

N6: TMenuItem;

N7: TMenuItem;

Memo1: TMemo;

Memo2: TMemo;

N8: TMenuItem;

procedure N8Click(Sender: TObject);

procedure N7Click(Sender: TObject);

procedure N6Click(Sender: TObject);

procedure N4Click(Sender: TObject);

procedure Button5Click(Sender: TObject);

procedure Button4Click(Sender: TObject);

procedure Button3Click(Sender: TObject);

procedure FormCreate(Sender: TObject);

procedure N3Click(Sender: TObject);

procedure N2Click(Sender: TObject);

procedure RadioButton3Click(Sender: TObject);

procedure RadioButton1Click(Sender: TObject);

procedure RadioButton2Click(Sender: TObject);

procedure Button1Click(Sender: TObject);

procedure Button2Click(Sender: TObject);

function Chislo: integer;

procedure Button6Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form1: TForm1; f,k:string; t:array[1..1000] of integer;

implementation

uses Unit2, Unit3, Unit4;

{$R *.dfm}

function TForm1.Chislo: integer;

var

i: integer;

begin

for i:=0 to Length(Edit1.Text) do

result:=result+Ord(Edit1.Text[i])+17;

end;

procedure TForm1.FormCreate(Sender: TObject);

begin

memo1.Text:='';

memo2.Text:='';

end;

procedure TForm1.N2Click(Sender: TObject);

begin

if OpenDialog1.Execute then

begin

f:=OpenDialog1.FileName;

Memo1.Lines.LoadFromFile(f);

end;

end;

procedure TForm1.N3Click(Sender: TObject);

begin

if SaveDialog1.Execute then

begin

k:=SaveDialog1.FileName;

Memo2.Lines.SaveToFile(k);

end;

end;

procedure TForm1.N4Click(Sender: TObject);

begin

close;

end;

procedure TForm1.N6Click(Sender: TObject);

begin

form2.visible:=true;

end;

procedure TForm1.N7Click(Sender: TObject);

begin

form3.visible:=true;

end;

procedure TForm1.N8Click(Sender: TObject);

begin

form4.visible:=true;

end;

procedure TForm1.RadioButton1Click(Sender: TObject);

begin

Button1.visible:=true;

Button2.visible:=true;

Button3.visible:=false;

Button4.visible:=false;

Button5.visible:=false;

Button6.visible:=false;

edit1.visible:=true;

end;



procedure TForm1.RadioButton2Click(Sender: TObject);

begin

Button1.visible:=false;

Button2.visible:=false;

Button3.visible:=true;

Button4.visible:=true;

Button5.visible:=false;

Button6.visible:=false;

edit1.visible:=false;

end;

procedure TForm1.RadioButton3Click(Sender: TObject);

begin

Button1.visible:=false;

Button2.visible:=false;

Button3.visible:=false;

Button4.visible:=false;

Button5.visible:=true;

Button6.visible:=true;

edit1.visible:=false;

end;

procedure TForm1.Button1Click(Sender: TObject);

var

d: byte;

i: integer;

begin

f:=memo1.Text;

k:=Edit1.Text;

for i := 1 to Length(f) do

if (f[i]<>' ')AND(f[i]<>'.')AND(f[i]<>';')AND(f[i]<>',') then

f[i]:=Chr( Ord(f[i])+Ord(k[i mod length(k)+1])mod 256) else f[i]:=f[i];

memo2.Text:=f;

end;

procedure TForm1.Button2Click(Sender: TObject);

var

d: byte;

i: integer;

begin

f:=memo1.Text;

for i := 1 to Length(f) do

if (f[i]<>' ') AND(f[i]<>'.')AND(f[i]<>';')AND(f[i]<>',') then

f[i]:=Chr((Ord(f[i])-Ord(Edit1.text[(i mod length(Edit1.text))+1]))mod 256);

memo2.Text:=f;

{ ProgressBar1.Max:=f.Size;

for i:=0 to f.Size-1 do

begin

f.Position:=i;

k.Position:=i;

f.Read(d,1);

d:=d-((i*85)-i+Chislo+28*i+(2*i+5-i-1));

k.Write(d,1);

ProgressBar1.Position:=i;

Application.ProcessMessages;

if Application.Terminated then Break;

end;

ProgressBar1.Position:=i;

k.Free;

f.Free; }

end;

procedure TForm1.Button3Click(Sender: TObject);

var i:longint;u,t:integer; y,w,o:string;

begin

f:=memo1.Text;

k:=Edit1.Text;

for i := length(f) downto 1 do

begin

y:=y+f[i];

end;

for i:=1 to length(f) do

begin

u := Ord(y[i]) ;

u:=u-50;

w:=w+chr(u);

end;

memo2.Text:=w;

memo2.Text:=w;

end;

procedure TForm1.Button4Click(Sender: TObject);

var i,u:integer; y,w,o:string; 

begin

f:=memo2.Text;

for i := length(f) downto 1 do

begin

y:=y+f[i];

end;

for i:=1 to length(f) do

begin

u := Ord(y[i]) ;

u:=u+50;

w:=w+chr(u);

end;

memo2.Text:=w;

end;

procedure TForm1.Button5Click(Sender: TObject);

var i,u:integer; y,w,o:string;

begin

f:=memo1.Text;

for i := length(f) downto 1 do

begin

y:=y+f[i];

end;

for i:=1 to length(f) do

begin

u := Ord(y[i]) ;

u:=u-40;

w:=w+chr(u);

end;

memo2.Text:=w;

end;

procedure TForm1.Button6Click(Sender: TObject);

var i,u:integer; y,w,o:string;

begin

f:=memo1.Text;

for i := length(f) downto 1 do

begin

y:=y+f[i];

end;

for i:=1 to length(f) do

begin

u := Ord(y[i]) ;

u:=u+40;

w:=w+chr(u);

end;

memo2.Text:=w;

end;

end.