Ââåäåíèå
 íàñòîÿùåå âðåìÿ ñóùåñòâóåò îãðîìíîå êîëè÷åñòâî ðàçíîîáðàçíûõ ïðîãðàìì øèôðîâàíèÿ/äåøèôðîâàíèÿ . Îíè â çíà÷èòåëüíîé ìåðå ïîçâîëÿþò ïîâûñèòü ñòåïåíü çàùèùåííîñòè òåêñòîâûõ äàííûõ.
 äàííîì ïðîåêòå ïðåäñòàâëåí êîìïîíåíò ïðîãðàììíîãî êîìïëåêñà äëÿ øèôðîâàíèÿ/äåøèôðîâàíèÿ äàííûõ, êîòîðûé ìîæåò áûòü èñïîëüçîâàí êàê â äîìàøíèõ, òàê è â êîììåð÷åñêèõ óñëîâèÿõ.
1.
Ïîñòàíîâêà çàäà÷è
Òðåáóåòñÿ ðàçðàáîòàòü ïðîãðàììó ïîçâîëÿþùóþ ðåàëèçîâàòü øèôðîâàíèå è äåøèôðîâàíèå òåêñòîâîãî ôàéëà ìåòîäîì çàìåíû è ìåòîäîì ïåðåñòàíîâêè (íå ìåíåå äâóõ ñïîñîáîâ)
2. Òðåáîâàíèÿ ê ïðîãðàììå
2.1 Òðåáîâàíèÿ ê ôóíêöèîíàëüíûì õàðàêòåðèñòèêàì
Ñèñòåìà äîëæíà îáåñïå÷èâàòü âîçìîæíîñòü âûïîëíåíèÿ ñëåäóþùèõ ôóíêöèé:
· Ââîä èñõîäíûõ äàííûõ (ñ êëàâèàòóðû, èç ôàéëà)
· Âûáîð àëãîðèòìà øèôðîâàíèÿ/äåøèôðîâàíèÿ
· Ñîõðàíåíèå çàøèôðîâàííûõ äàííûõ
· Äåøèôðîâàíèå äàííûõ ïî èñõîäíîìó àëãîðèòìó øèôðîâàíèÿ
· Ñîõðàíåíèå äåøèôðîâàííûõ äàííûõ â ôàéë
2.2 Òðåáîâàíèÿ ê íàäåæíîñòè
Îáåñïå÷èòü öåëîñòíîñòü õðàíèìîé èíôîðìàöèè.
2.3 Òðåáîâàíèÿ ê ñîñòàâó è ïàðàìåòðàì òåõíè÷åñêèõ ñðåäñòâ
Ñèñòåìà äîëæíà ðàáîòàòü íà IBM-ñîâìåñòèìûõ ïåðñîíàëüíûõ êîìïüþòåðàõ. Ìèíèìàëüíàÿ êîíôèãóðàöèÿ: òèï ïðîöåññîðà – Pentium è âûøå; îáúåì ÎÇÓ – 32 Ìá è âûøå.
2.4 Òðåáîâàíèÿ ê èíôîðìàöèîííîé è ïðîãðàììíîé ñîâìåñòèìîñòè
Ñèñòåìà äîëæíà ðàáîòàòü ïîä óïðàâëåíèåì îïåðàöèîííûõ ñèñòåì ñåìåéñòâà Windows, ðåàëèçóþùèõ Win32 API.
3. Ïðîåêòèðîâàíèå
Âûáîð àðõèòåêòóðû ïðîãðàììíîãî îáåñïå÷åíèÿ
Ýòîò ïðîåêò èìååò îäíîïîëüçîâàòåëüñêóþ àðõèòåêòóðó, òàê êàê ðàññ÷èòàí íà ðàáîòó ñ îäíèì ïîëüçîâàòåëåì.
Âûáîð ÿçûêà è ñðåäû ïðîãðàììèðîâàíèÿ
 êà÷åñòâå ñðåäû ïðîãðàììèðîâàíèÿ áûë èñïîëüçîâàí BorlandDelphi 7, îñíîâàííûé íà ÿçûêå ObjectPascal. Îí áûë âûáðàí, ïîòîìó ÷òî îí ðåàëèçóåò âîçìîæíîñòü èñïîëüçîâàíèÿ âèçóàëüíîãî ïðîãðàììèðîâàíèÿ, ÷òî î÷åíü âàæíî äëÿ äàííîãî ïðîåêòà. Òàê æå åãî ìîãóò èñïîëüçîâàòü ïðîãðàììèñòû ñî ñðåäíèì óðîâíåì ïîäãîòîâêè.
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
Êíîïêè
· «Êîäèðîâàòü» ïîçâîëÿåò çàêîäèðîâàòü èñõîäíûé òåêñò ïî çàäàííîìó àëãîðèòìó
· «Äåêîäèðîâàòü» ïîçâîëÿåò äåêîäèðîâàòü òåêñò ïî çàäàííîìó àëãîðèòìó
Ìåíþ
Îêíî ïðîãðàììû èìååò ñëåäóþùåå ìåíþ, êîòîðîå ñîäåðæèò âêëàäêè:
· Ôàéë. Â ýòîé çàêëàäêå åñòü ïóíêòû «Îòêðûòü», «Ñîõðàíèòü êàê», «Âûõîä» ñ ñîîòâåòñòâóþùèìè ôóíêöèÿìè.
· Ñïðàâêà. Â ýòîé çàêëàäêå åñòü ïóíêòû «Î ïðîãðàììå», «Îá àâòîðå», «Èíñòðóêöèÿ» ñ ñîîòâåòñòâóþùèìè ôóíêöèÿìè.
Ñïîñîá çàâåðøåíèÿ ðàáîòû
Ðàáîòà ïðîãðàììû ìîæåò áûòü çàâåðøåíà ñëåäóþùèìè ñïîñîáàìè:
· Ñòàíäàðòíûé ñïîñîá ïðèíÿòûé â OSWindows
· Íàæàâ íà êíîïêó «Ôàéë» - > «Âûõîä».
Çàêëþ÷åíèå
Äàííàÿ ïðîãðàììà ìîæåò âûïîëíÿòü âñå ïîñòàâëåííûå ïåðåä íåé çàäà÷è â ñîîòâåòñòâèå ñ òåõíè÷åñêèì çàäàíèåì.  äàëüíåéøåì âîçìîæíî ðàñøèðåíèå âîçìîæíîñòåé ýòîé ïðîãðàììû. Ìîæíî äîáàâèòü áîëüøåå êîëè÷åñòâî ñïîñîáîâ øèôðîâàíèÿ, à òàê æå ðàñøèðèòü ïîëüçîâàòåëüñêèé èíòåðôåéñ. Ïðåäîñòàâëåííàÿ âåðñèÿ ïðîãðàììû ìîæåò áûòü èñïîëüçîâàíà â ëþáîì ó÷åáíîì çàâåäåíèè â êà÷åñòâå ó÷åáíîãî ïîñîáèÿ. Èíòåðôåéñ ïðîãðàììû èíòóèòèâíî ïîíÿòåí, ÷òî ïîçâîëèò ïîëüçîâàòåëþ â êîðîòêèé ñðîê îñâîèòü ðàáîòó ñ ïðîãðàììîé.
Ñïèñîê ëèòåðàòóðû
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).
Ïðèëîæåíèå
unitUnit1;
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.
|