|
||||||||||||
|
||||||||||||
|
|||||||||
МЕНЮ
|
БОЛЬШАЯ ЛЕНИНГРАДСКАЯ БИБЛИОТЕКА - РЕФЕРАТЫ - Текстовый редактор "Блокнот" с функцией шифрования - дешифрования классическими криптографическими методамиТекстовый редактор "Блокнот" с функцией шифрования - дешифрования классическими криптографическими методами33 Министерство образования и науки Республики Казахстан Карагандинский государственный технический университет Кафедра КУРСОВАЯ РАБОТА на тему: Текстовый редактор "Блокнот" с функцией шифрования - дешифрования классическими криптографическими методами Выполнил: Проверил: Караганда 2009 г. Содержание
Каждая строка в этой таблице соответствует одному шифру замены аналогично шифру Цезаря для алфавита, дополненного пробелом. При шифровании сообщения его выписывают в строку, а под ним ключ. Если ключ оказался короче сообщения, то его циклически повторяют. Шифротекст получают, находя символ в колонке таблицы по букве текста и строке, соответствующей букве ключа. Например, используя ключ АГАВА, из сообщения ПРИЕЗЖАЮ ШЕСТОГО получаем следующую шифровку:
В компьютере такая операция соответствует сложению кодов ASCII символов сообщения и ключа по модулю 256. ГаммированиеПроцесс шифрования заключается в генерации гаммы шифра и наложении этой гаммы на исходный открытый текст. Перед шифрованием открытые данные разбиваются на блоки Т (0) i одинаковой длины (по 64 бита). Гамма шифра вырабатывается в виде последовательности блоков Г (ш) i аналогичной длины (Т (ш) i=Г (ш) i+Т (0) i, где + - побитовое сложение, i =1-m).Процесс дешифрования сводится к повторной генерации шифра текста и наложение этой гаммы на зашифрованные данные T (0) i=Г (ш) i+Т (ш) i.Шифры перестановкиАлгоритмы двойных перестановок. Сначала в таблицу записывается текст сообщения, а потом поочередно переставляются столбцы, а затем строки. При расшифровке порядок перестановок был обратный. Пример данного метода шифрования показан в следующих таблицах:
Каждая строка в этой таблице соответствует одному шифру замены вроде шифра Юлия Цезаря для алфавита, дополненного пробелом. При шифровании сообщения его выписывают в строку, а под ним ключ. Если ключ оказался короче сообщения, то его циклически повторяют. Шифровку получают, находя символ в колонке таблицы по букве текста и строке, соответствующей букве ключа. Этот очень распространенный вид шифра сохранился до наших дней. Например, используя ключ АГАВА, из сообщения ПРИЕЗЖАЮ ШЕСТОГО получаем следующую шифровку:
В компьютере такая операция соответствует сложению кодов ASCII символов сообщения и ключа по некоторому модулю. Кажется, что если таблица будет более сложной, чем циклическое смещение строк, то шифр станет надежнее. Это действительно так, если ее менять почаще, например, от слова к слову. Но составление таких таблиц, представляющих собой латинские квадраты, где любая буква встречается в строке или столбце один раз, трудоемко и его стоит делать лишь на ЭВМ. Практическая частьВнешний вид текстового редактора "Блокнот" с функцией шифрования-дешифрования классическими криптографическими методами представлен на рисунке 1.Рисунок 1 - Главная форма текстового редактораВ текстовом редакторе имеются меню "Файл" (рисунок 2), "Правка" (рисунок 3), "Метод" (рисунок 4), "Справка" (рисунок 5).Рисунок 2 - Меню "Файл" текстового редактора.Рисунок 3 - Меню "Правка" текстового редактораРисунок 4 - Меню "Метод" текстового редактораРисунок 5 - Меню "Справка" текстового редактораПользователь также может выбрать метод шифрования при нажатии кнопки "Метод шифрования", при этом появится окно "Метод шифрования", показанный на рисунке 6.Рисунок 6 - Окно "Метод шифрования" текстового редактораВыводВ результате выполнения данной курсовой работы, я ознакомилась с классическими методами шифрования. А также изучила принцип программной реализации классических криптографических методов: метода Цезаря; метода Гронсфельда; метода гаммирования; метода двойных перестановок; метода замены с использованием таблицы Виженера. Я смогла, применяя свои знания в области программирования, реализовать их программно.Листинг программыprocedure TForm1. N23Click (Sender: TObject);beginform2. SHOWMODAL;end;procedure TForm1. N24Click (Sender: TObject);beginForm3. SHOWMODAL;end;procedure TForm1. N5Click (Sender: TObject);var i: integer;beginfor i: =0 to m2. Lines. Count-1 dom2. Lines [i]: ='';for i: =0 to m1. Lines. Count-1 dom1. Lines [i]: =''; // очистка memo1m1. SetFocus;end;procedure TForm1. N6Click (Sender: TObject);vari: integer;beginOpenDialog1. Filter: = 'Текстовые файлы| *. txt';if OpenDialog1. Execute thenbeginEdFile: =OpenDialog1. FileName; {в переменную присваиваемимя и полный путь к файлу}m1. Lines. LoadFromFile (EdFile);end;end;procedure TForm1. N7Click (Sender: TObject);beginsaveDialog1. Filter: = 'Текстовые файлы| *. txt';if saveDialog1. Execute thenbeginEdFile: =SaveDialog1. FileName; // сохранение файлаm2. Lines. SaveToFile (EdFile);end;end;procedure TForm1. N8Click (Sender: TObject);beginif saveDialog1. Execute thenbeginEdFile: =SaveDialog1. FileName; // сохранение файлаm2. Lines. SaveToFile (EdFile);end;end;procedure TForm1. N10Click (Sender: TObject);beginForm1. Close;end;procedure TForm1. N12Click (Sender: TObject);beginm1. PasteFromClipboard; // вставкаend;procedure TForm1. N14Click (Sender: TObject);beginm1. CopyToClipboard; // копированиеm2. CopyToClipboard;end;procedure TForm1. N13Click (Sender: TObject);beginm1. CutToClipboard; // Вырезаниеend;procedure TForm1. N15Click (Sender: TObject);beginm1. SelText: =''; // Удалениеm2. SelText: ='';m3. SelText: ='';end;procedure TForm1. N18Click (Sender: TObject);var i: integer;beginfor i: =0 to m2. Lines. Count-1 dom2. Lines [i]: ='';m1. SetFocus;MessageDlg ('Выберите метод щифрования! ', mtConfirmation, [mbOk], 0);end;procedure TForm1. Button1Click (Sender: TObject);beginform4. Showmodal;end;procedure TForm1. B1Click (Sender: TObject);label 1,2,3,4,5,6,7;varSL: TStringList;Al,a3,A,st,R,b,c,c2: string; D, MyChr: char;dl, i,j,m,g,n,l,h,Summa,NewCode,k,p,x: integer;A1: ARRAY [1. .34,1. .34] of integer;a2: array [1. .8] of integer;mas: array [1. .11,1. .11] of char;mas1: array [1. .11] of char;t: STRing [8] ; c1: STRing [8] ;beginif form4. radiogroup1. ItemIndex=-1 thenMessageDlg ('Выберите метод щифрования! ', mtConfirmation, [mbOk], 0);if form4. RadioGroup1. ItemIndex=0 thenbeginM2. Clear; m3. Clear;Al: ='';m: =StrToInt (Edit1. Text);SL: = TStringList. Create;SL. Clear;for i: = 0 to m1. Lines. Count-1 dobeginA: = m1. Lines [i] ;For j: =32 to 255 doAl: =Al + Chr (j);R: ='';for j: = 1 to Length (A) dobeginMyChr: =A [j] ;n: =Pos (MyChr, Al);If n = 0Then R: =R + MyChrElseBeginSumma: =n + m;If Summa < 225 // Если предполагаемый номер символа попадает в алфавитThen NewCode: =SummaElse NewCode: = 32 - 1 + (Summa - 255);R: =R+ Al [NewCode] ;End;end;SL. Add (R);end;m2. Clear;m2. Lines: = SL;SL. Free;end;if form4. RadioGroup1. ItemIndex=1 thenbeginM2. Clear; m3. Clear;c: =''; a: =''; b: ='';A: = m1. Text;b: =edit1. Text;1: n: =length (b);dl: =length (a);if n>dl thendelete (b,dl+1,n) elsebeginc: =copy (b,1,n);insert (c,b,n+1); goto 1;end;for i: =1 to dl dobeginp: =ord (a [i]) +strtoint (b [i]);m2. Text: =m2. text+chr (p);end;end;if form4. RadioGroup1. ItemIndex=2 thenbeginM2. Clear; m3. Clear;st: =''; c: =''; a: =''; b: ='';A: = m1. Text;randomize;for i: =1 to 4 dost: =st+chr (i+random (215) +40);edit1. Text: =st;4: n: =length (st);dl: =length (a);if n>dl thendelete (st,dl+1,n) elsebeginc: =copy (st,1,n);insert (c,st,n+1); goto 4;end;for i: =1 to dl dobegink: =ord (a [i]) xor ord (st [i]);m2. Text: =m2. text+chr (k);end;end;if form4. RadioGroup1. ItemIndex=3 thenBEGINM2. Clear; m3. Clear;A: =''; B: =''; c: ='';A: =EDIT1. Text;b: =edit2. Text;c: =m1. Text;n: = length (a);k: = length (b);if n<>k thenbeginMessageDlg ('Число цифр в ключах должны совпадать! ', mtConfirmation, [mbOk], 0);edit1. Clear; edit2. Clear; GOTO 7;end;5: for j: =2 to k+1 domas [1,j]: =a [j-1] ;for j: =2 to n+1 domas [j,1]: =b [j-1] ;for i: =2 to k+1 dofor j: =2 to n+1 dobeginif c<>'' thenbeginmas [i,j]: =c [1] ;delete (c,1,1) endelsemas [i,j]: =' ';end;for i: =n+1 downto 2 dofor j: =n+1 downto 2 doif ord (mas [1, i]) >ord (mas [1,j]) thenfor h: =1 to n+1 dobeginmas1 [h]: =mas [h, i] ;mas [h, i]: =mas [h,j] ;mas [h,j]: =mas1 [h] ;end;for i: =n+1 downto 2 dofor j: =n+1 downto 2 doif ord (mas [i,1]) >ord (mas [j,1]) thenfor h: =1 to n+1 dobeginmas1 [h]: =mas [i,h] ;mas [i,h]: =mas [j,h] ;mas [j,h]: =mas1 [h] ;end;for i: =2 to n+1 dofor j: =2 to n+1 dom2. Text: =m2. Text+mas [i,j] ;if c<>'' then goto 5;7: end;if form4. RadioGroup1. ItemIndex=4 thenbeginM2. Clear; m3. Clear;c: =''; a: =''; b: ='';A: = M1. Text;b: =edit1. Text;for i: =0 to m1. Lines. Count-1 dobegina3: ='';a3: =m1. Lines [i] ;for j: =1 to length (a3) dobeginif ord (a3 [j]) = 184 thenbeginMessageDlg ('Можно вводить только прописные буквы! ', mtConfirmation, [mbOk], 0);m1. Clear;M2. Clear;GOTO 6;end;if (ord (a3 [j]) >= 224) and (ord (a3 [j]) <= 255) thenbeginMessageDlg ('Можно вводить только прописные буквы! ', mtConfirmation, [mbOk], 0);m1. Clear;M2. Clear;M3. Clear;GOTO 6;end;end;end;2: n: =length (b);dl: =length (a);if length (b) >dl thendelete (b,length (a) +1,length (b)) elsebeginc: =copy (b,1,n);insert (c,b,n+1); goto 2;end;for I: =1 to 34 dofor j: =1 to 34 dobegink: = j-i+1;if k=0 then a1 [i,j]: =34 elseif k>0 then a1 [i,j]: =k elsea1 [i,j]: =34+k;end;for i: =1 to length (a) dobeginif a [i] <>'' thenbeginif a [i] =' ' then l: =34 ELSEif a [i] ='Ё' THEN l: =7 ELSEBEGINn: =ord (a [i]) - 191;if (n>=1) and (n<7) then l: =n elseif (n>=7) and (n<34) then l: =n+1;END;end;if b [i] <>'' thenbeginif b [i] =' ' then M: =34 ELSEif b [i] ='Ё' THEN m: =7 ELSEBEGINn: =ord (b [i]) - 191;if (n>=1) and (n<7) then m: =n elseif (n>=7) and (n<34) then m: =n+1;END;end;g: =a1 [M,L] ;if g=7 then d: ='Ё' elseif g=34 then d: =' ' elsebeginif (g>=1) and (g<7) thend: =chr (g+191);if (g>=8) and (g<34) thend: =chr (g-1+191);end;m2. Text: =m2. Text+d;end;6: end;end;procedure TForm1. N19Click (Sender: TObject);beginform4. RadioGroup1. ItemIndex: =0;b1. SetFocus; M2. Clear; M3. Clear;edit2. Visible: =false;label2. Visible: =false;end;procedure TForm1. FormActivate (Sender: TObject);beginm1. SetFocus;end;procedure TForm1. B2Click (Sender: TObject);label 1,2,3,4,5,6,7;var SL: TStringList;Al,A,st,R,b,c,c2: string; D, MyChr: char;dl, i,j,m,g,h,n,l,S,NewCode,k,p,x: integer;A1: ARRAY [1. .34,1. .34] of integer;a2: array [1. .8] of integer; t: STRing [8] ;mas: array [1. .11,1. .11] of char;mas2: array [1. .11,1. .11] of char;mas1: array [1. .11] of char; c1: STRing [8] ;beginif form4. RadioGroup1. ItemIndex=0 thenbeginAl: ='';m: =StrToInt (Edit1. Text);SL: = TStringList. Create;SL. Clear;for i: = 0 to m2. Lines. Count-1 dobeginA: = m2. Lines [i] ;For j: =32 to 255 doAl: =Al + Chr (j);R: ='';for j: = 1 to Length (A) dobeginMyChr: =A [j] ;n: =Pos (MyChr, Al);If n = 0Then R: =R + MyChrElseBeginS: =n - m;If S > 0 // Если предполагаемый номер символа попадает в алфавитThen NewCode: =SElse NewCode: = 224 + S;R: =R+ Al [NewCode] ;End;end;SL. Add (R);end;m3. Clear;m3. Lines: = SL;SL. Free;end;if form4. RadioGroup1. ItemIndex=1 thenbeginM3. Clear;c: =''; a: =''; b: ='';A: = m2. Text;b: =edit1. Text;1: n: =length (b);dl: =length (a);if n>dl thendelete (b,dl+1,n) elsebeginc: =copy (b,1,n);insert (c,b,n+1); goto 1;end;for i: =1 to dl dobeginp: =ord (a [i]) - strtoint (b [i]);m3. Text: =m3. text+chr (p);end;end;if form4. RadioGroup1. ItemIndex=2 thenbeginM3. Clear;st: =''; c: =''; a: =''; b: ='';A: = m2. Text;st: =edit1. Text;4: n: =length (st);dl: =length (a);if n>dl thendelete (st,dl+1,n) elsebeginc: =copy (st,1,n);insert (c,st,n+1); goto 4;end;for i: =1 to dl dobegink: =ord (a [i]) xor ord (st [i]);m3. Text: =m3. text+chr (k);end;end;if form4. RadioGroup1. ItemIndex=3 thenBEGINM3. Clear;A: =''; B: =''; c: ='';A: =EDIT1. Text;b: =edit2. Text;c: =m2. Text;n: = length (a);k: = length (b);if n<>k thenbeginMessageDlg ('Число цифр в ключах должны совпадать! ', mtConfirmation, [mbOk], 0);edit1. Clear; edit2. Clear;end;5: for j: =2 to k+1 domas [1,j]: =a [j-1] ;for j: =2 to n+1 domas [j,1]: =b [j-1] ;for i: =n+1 downto 2 dofor j: =n+1 downto 2 doif ord (mas [1, i]) >ord (mas [1,j]) thenbegind: =mas [1, i] ;mas [1, i]: =mas [1,j] ;mas [1,j]: =d;end;for i: =n+1 downto 2 dofor j: =n+1 downto 2 doif ord (mas [i,1]) >ord (mas [j,1]) thenbegind: =mas [i,1] ;mas [i,1]: =mas [j,1] ;mas [j,1]: =d;end;for i: =2 to k+1 dofor j: =2 to n+1 dobeginif c<>'' thenbeginmas [i,j]: =c [1] ;delete (c,1,1) endelsemas [i,j]: =' ';end;m3. Text: =m1. Text;{for i: =2 to n+1 dobeging: =pos (mas [i,1],b); edit3. Text: =edit3. Text+inttostr (g);for h: =1 to n+1 dobeginmas1 [h]: =mas [i,h] ;mas2 [g,h]: =mas1 [h] ;end;end;for j: =2 to n+1 dobeging: =pos (mas [1,j],a);for h: =1 to n+1 dobeginmas1 [h]: =mas2 [h,j] ;mas [h,g]: =mas1 [h] ;end;end;for i: =2 to n+1 dofor j: =2 to n+1 dom3. Text: =m3. Text+mas [i,j] ;if c<>'' then goto 5; }end;if form4. RadioGroup1. ItemIndex=4 thenbeginM3. Clear;c: =''; a: =''; b: ='';A: = M2. Text;b: =edit1. Text;2: n: =length (b);dl: =length (a);if length (b) >dl thendelete (b,length (a) +1,length (b)) elsebeginc: =copy (b,1,n);insert (c,b,n+1); goto 2;end;for I: =1 to 34 dofor j: =1 to 34 dobegink: = j-i+1;if k=0 then a1 [i,j]: =34 elseif k>0 then a1 [i,j]: =k elsea1 [i,j]: =34+k;end;for i: =1 to length (A) doBEGINif b [i] <>'' thenbeginif b [i] =' ' then M: =34 ELSEif b [i] ='Ё' THEN m: =7 ELSEBEGINn: =ord (b [i]) - 191;if (n>=1) and (n<7) then m: =n elseif (n>=7) and (n<34) then m: =n+1;END;end;if a [i] ='Ё' then g: =7 elseif a [i] =' ' then g: =34 elsebeginx: =ord (a [i]) - 191;if (x>=1) and (x<7) theng: =x elseif (X>=7) and (X<34) then g: =x+1;end;for j: =1 to 34 doif a1 [m,j] =g thenBEGINl: =j;if l=7 then d: ='Ё' elseif l=34 then d: =' ' elsebeginif (l>=1) and (l<7) thend: =chr (l+191);if (l>=8) and (l<34) thend: =chr (l-1+191);END;end;m3. Text: =m3. Text+d;end;end;end;procedure TForm1. N20Click (Sender: TObject);beginform4. RadioGroup1. ItemIndex: =1;b1. SetFocus; M2. Clear; M3. Clear;edit2. Visible: =false;label2. Visible: =false;end;procedure TForm1. Button2Click (Sender: TObject);beginm1. Clear;m2. Clear;m3. Clear;edit1. Clear;edit2. Clear;end;procedure TForm1. N21Click (Sender: TObject);beginform4. RadioGroup1. ItemIndex: =2;b1. SetFocus; M2. Clear; M3. Clear; edit2. Visible: =false;label2. Visible: =false;end;procedure TForm1. N22Click (Sender: TObject);beginM2. Clear; M3. Clear;form4. RadioGroup1. ItemIndex: =3;if form4. radiogroup1. ItemIndex=3 thenbeginedit2. Visible: =true;label2. Visible: =true;endelsebeginedit2. Visible: =false;label2. Visible: =false;end;b1. SetFocus; m3. Clear;end;procedure TForm1. N9Click (Sender: TObject);beginform4. RadioGroup1. ItemIndex: =4; edit2. Visible: =false;label2. Visible: =false;b1. SetFocus; M2. Clear; M3. Clear;end;procedure TForm1. N11Click (Sender: TObject);beginm2. Undo;end;end.unit Unit4;interfaceusesWindows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,Dialogs, StdCtrls, ExtCtrls;typeTForm4 = class (TForm)RadioGroup1: TRadioGroup;Button1: TButton;procedure Button1Click (Sender: TObject);procedure FormActivate (Sender: TObject);private{ Private declarations }public{ Public declarations }end;varForm4: TForm4;implementationuses Unit1;{$R *. dfm}procedure TForm4. Button1Click (Sender: TObject);beginif radiogroup1. ItemIndex=-1 thenMessageDlg ('Выберите метод щифрования! ', mtConfirmation, [mbOk], 0)elsebeginform1. Show;if radiogroup1. ItemIndex=3 thenbeginFORM1. M2. Clear; form1. M3. Clear;form1. edit2. Visible: =true;form1. label2. Visible: =true;endelsebeginform1. edit2. Visible: =false;form1. label2. Visible: =false;end;if radiogroup1. ItemIndex=0 thenbeginform1. M2. Clear; form1. M3. Clear; end;if radiogroup1. ItemIndex=1 thenbeginform1. M2. Clear; form1. M3. Clear; end;if radiogroup1. ItemIndex=2 thenbeginform1. M2. Clear; form1. M3. Clear; end;if radiogroup1. ItemIndex=4 thenbeginform1. M2. Clear; form1. M3. Clear; end;form4. Close;end;end;procedure TForm4. FormActivate (Sender: TObject);beginRadiogroup1. ItemIndex: =-1;end;end. |
РЕКЛАМА
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
БОЛЬШАЯ ЛЕНИНГРАДСКАЯ БИБЛИОТЕКА | ||
© 2010 |