Введение
В настоящее время существует огромное количество разнообразныхпрограмм шифрования/дешифрования. Они в значительной мере позволяют повыситьстепень защищенности текстовых данных.
В данном проекте представлен компонент программного комплексадля шифрования/дешифрования данных, который может быть использован как вдомашних, так и в коммерческих условиях.
1. Постановка задачи
Требуется разработать программу позволяющую реализоватьшифрование и дешифрование текстового файла методом замены и методомперестановки (не менее двух способов)
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! щВ результате тестирования было установлено, что программаработает исправно и выполняет возложенные на нее функции правильно.
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;
procedureTForm1.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;
procedureTForm1.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;
procedureTForm1.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 modlength(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[(imod 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.