страница 1
|
|||||||||||||||||||||||||||||||||||||||||||
Похожие работы
|
Курсовая работа на тему Криптография. «Тарабарский код» - страница №1/1
Курсовая работа на темуКриптография. «Тарабарский код»ВведениеКриптогра́фия (от греч. κρυπτός — скрытый и γράφω — пишу) — наука о методах обеспечения конфиденциальности (невозможности прочтения информации посторонним) и аутентичности (целостности и подлинности авторства, а также невозможности отказа от авторства) информации. Изначально криптография изучала методы шифрования информации — обратимого преобразования открытого (исходного) текста на основе секретного алгоритма и/или ключа в шифрованный текст (шифртекст). Традиционная криптография образует раздел симметричных криптосистем, в которых зашифрование и расшифрование проводится с использованием одного и того же секретного ключа. Помимо этого раздела современная криптография включает в себя асимметричные криптосистемы, системы электронной цифровой подписи (ЭЦП), хеш-функции, управление ключами, получение скрытой информации, квантовую криптографию. Криптография не занимается: защитой от обмана, подкупа или шантажа законных абонентов, кражи ключей и других угроз информации, возникающих в защищенных системах передачи данных. Криптография — одна из старейших наук, ее история насчитывает несколько тысяч лет. Криптосистема — семейство обратимых преобразований открытого текста в шифрованный. Шифрование — процесс нормального применения криптографического преобразования открытого текста на основе алгоритма и ключа, в результате которого возникает шифрованный текст. Расшифровывание — процесс нормального применения криптографического преобразования шифрованного текста в открытый. До нашего времени криптография занималась исключительно конфиденциальностью сообщений (то есть зашифровкой) — преобразованием сообщений из понятной формы в непонятную и обратное восстановление на стороне получателя, делая его нечитаемым для перехватившего или подслушавшего без секретного знания (а именно ключа, необходимого для дешифровки сообщения). В последние десятилетия область применения криптографии расширилась и включает не только тайную передачу сообщений, но и методы проверки целостности сообщений, идентификации получателя/отправителя сообщения, цифровую подпись, интерактивную проверку, защищённые вычисления и другие. Основные классические виды шифрования ― это перестановочное шифрование, при котором буквы сообщения переставляются (например «помоги мне» превращается в «опомиг нме» при простейшей схеме перестановки) и замещающий шифр, когда буквы или группы букв по определённому правилу заменяются на другие буквы или группы букв (например «fly at once» становится «gmz bu podf» при замене каждой буквы следующей за ней в алфавите). Простейшие версии обоих шифров — не более чем небольшая защита от любопытных. Первым замещающим шифром был шифр Цезаря, в котором каждая буква исходного текста заменялась буквой, стоящей на некоторое фиксированное число мест дальше в алфавите. Назван этот шифр в честь Юлия Цезаря, который, как сообщается, использовал шифр со смещением 3 при связи со своими полководцами во время военных кампаний. Развитие компьютерной техники и электроники после Второй мировой сделало возможным использование более сложных шифров. Более того, компьютеры позволили шифровать любые данные, которые представимы в цифровом бинарном виде, в отличие от классических шифров, которые предназначались только для шифрования написанных текстов. Это привело к непригодности лингвистических методов криптоанализа для большинства случаев, так как многие компьютерные шифры характеризуются работой с последовательностями битов (возможно сгруппированных в блоки), в то время как классические и механические схемы обычно манипулировали традиционными знаками (буквами и цифрами). С другой стороны, компьютеры помогают криптоанализу, что может компенсировать усложнение шифров. Однако, несмотря на это, хорошие современные шифры идут впереди криптоанализа, обычно использование качественного шифра очень эффективно (то есть осуществляется быстро и с минимальными ресурсами), в то время как взлом требует усилий на много порядков больше как по времени, так и по ресурсам, делая криптоанализ настолько неэффективным и непрактичным, что можно считать его невозможным за разумное время или с разумными ресурсами. Задача: написать программу, которая сможет шифровать и расшифровывать тексты по «Тарабарскому» способу.В средние века на Руси был популярен «тарабарский» способ шифрования речи. Для кодирования между слогами слов размещались вспомога-тельные словечки «тара» и «бара». Так, забавный текст: «тарапойба-радем тарагубаралять» означает обычную фразу «пойдем гулять». Так как разработка искусственного интелекта не входит в условие задачи, то был выбран способ решения задачи путём контроля пользователем процесса дешифровки. Т.е. сформировать словари «слов-паразитов» и возможность их редактирования пользователем.
Алгоритм дешифровки:
Проограмма разработана на языке Delphi. Рисунок Среда разработки. Основная форма Для создания более приятного и привычного интерфейса был выбран пакет визульных компонентов TMS pack 5.0 При старте программы мы получаем основное окно: Рисунок Основное окно программы В поле «Исходный текст» вводится/вставляется текст, подлежащий шифрации/дешифрации. Процесс шифрации/дешифрации выбирается кнопками «Зашифровать» и «Расшифровать». При нажатии кнопки «Зашифровать» появляется диалог выбора алгоритма шифрования где выбираем уровень сложности шифрования. Кнопки выводят диалог изменения/добавления/удаления «слов-паразитов» для выбранного уровня сложности. При нажатии кнопки «ОК» происвходит сохрание списка в текстовый файл. ВыводШифрацию текста по «Тарабарскому языку» вполне возможно автоматизировать, но дешифрация текста требует, хотя и минимального, участия пользователя. Основным «стоповым» примером было выбрано слово «тараканище» абсолютно теряющее свой смысл после дешифрации. Т.е. алгоритм дешифрации еще требует доработки, но, в основном, им можно вполне нормально пользоваться. Список литературы
Текст программыunit Gl_forma;interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, AdvPanel, ExtCtrls, AdvGlowButton, AdvSmoothLabel, StdCtrls, Buttons, Grids, ValEdit; type TForm1 = class(TForm) AdvPanel1: TAdvPanel; AdvPanelStyler1: TAdvPanelStyler; Memo1: TMemo; Label1: TLabel; AdvSmoothLabel1: TAdvSmoothLabel; Memo2: TMemo; Label2: TLabel; AdvGlowButton1: TAdvGlowButton; AdvGlowButton2: TAdvGlowButton; AdvGlowButton3: TAdvGlowButton; SpeedButton1: TSpeedButton; AdvPanelStyler2: TAdvPanelStyler; ListKod: TListBox; ListBox1: TListBox; procedure AdvGlowButton3Click(Sender: TObject); procedure AdvGlowButton1Click(Sender: TObject); procedure SpeedButton1Click(Sender: TObject); procedure FormCreate(Sender: TObject); procedure AdvGlowButton2Click(Sender: TObject); private { Private declarations } public { Public declarations } tekdir:string; procedure Initialisation; procedure Work(slovo:string); procedure CheckDefis(slovo:string); end; Form1: TForm1; Glasnie, Sonornie: set of char; Slogi : string; CurrentChar, PreviousChar : char; SlogReady : boolean; implementation uses MetodShifra_Forma, About_Forma; {$R *.dfm} procedure TForm1.Initialisation; begin SlogReady := false; Slogi := ''; Sonornie := ['л']; Sonornie := Sonornie + ['м']; Sonornie := Sonornie + ['н']; Sonornie := Sonornie + ['р']; Sonornie := Sonornie + ['й']; Glasnie := ['а']; Glasnie := Glasnie + ['е']; Glasnie := Glasnie + ['ё']; Glasnie := Glasnie + ['и']; Glasnie := Glasnie + ['о']; Glasnie := Glasnie + ['у']; Glasnie := Glasnie + ['э']; Glasnie := Glasnie + ['ю']; Glasnie := Glasnie + ['я']; end; var i:integer; begin SlogReady := false; Slogi :=''; for i := 1 to Length(Slovo) do begin {честно незнаю что тут происходит} if Slovo[i] in Glasnie then if Slovo[i-1] in Glasnie then Slogi := Slogi + '_' + Slovo[i] else if SlogReady then Slogi := Slogi + '_' + Slovo[i] else begin SlogReady := true; Slogi := Slogi + Slovo[i] end else if SlogReady then if Slovo[i+1] in Glasnie then begin Slogi := Slogi + '_' + Slovo[i]; SlogReady := false; end else if Slovo[i] in Sonornie then if Slovo[i+1] in Sonornie then begin Slogi := Slogi + '_' + Slovo[i]; SlogReady := false; end else begin Slogi := Slogi + Slovo[i] + '_'; SlogReady := false; end else begin Slogi := Slogi + '_' + Slovo[i]; SlogReady := false; end else Slogi := Slogi + Slovo[i]; end; end; procedure TForm1.CheckDefis(slovo:string); var i, j: integer; begin for i := Length(Slogi) downto 1 do begin if Slogi[i] = '_' then begin for j := i to Length(Slogi) - 1 do Slogi[j] := Slogi[j+1]; Slogi[Length(Slogi)] := ' '; exit; end; if Slogi[i] in Glasnie then exit; end; end; procedure TForm1.FormCreate(Sender: TObject); begin getdir(0,tekdir); tekdir:=tekdir+'\'; form1.ListKod.Clear; end; var i,j,k:longint; st,slovo:string; begin form2.AdvOfficeRadioGroup1.ItemIndex:=-1; form2.ShowModal; if form2.AdvOfficeRadioGroup1.ItemIndex=-1 then exit; {Разбиение строк на слова} form1.Initialisation; for I := 0 to form1.Memo1.Lines.Count - 1 do begin st:=form1.Memo1.Lines.Strings[i]; while pos(' ',st)0 do begin j:=pos(' ',st); slovo:=copy(st,1,j-1); form1.Work(slovo); form1.CheckDefis(slovo); if length(slovo)>2 then form1.ListBox1.Items.Add('_'+slogi) else form1.ListBox1.Items.Add(slogi); delete(st,1,j); end; slovo:=st; if length(slovo)>0 then begin form1.Work(slovo); form1.CheckDefis(slovo); if length(slovo)>2 then form1.ListBox1.Items.Add('_'+slogi) else form1.ListBox1.Items.Add(slogi); end; form1.ListBox1.Items.Add(''); end; {Подгружаем кодовые слова} if form2.AdvOfficeRadioGroup1.ItemIndex=0 then form1.ListKod.Items.LoadFromFile(form1.tekdir+'Простой код.txt'); if form2.AdvOfficeRadioGroup1.ItemIndex=1 then form1.ListKod.Items.LoadFromFile(form1.tekdir+'Средний код.txt'); if form2.AdvOfficeRadioGroup1.ItemIndex=2 then form1.ListKod.Items.LoadFromFile(form1.tekdir+'Сложный код.txt'); {шифруем текст} form1.ListKod.ItemIndex:=0; for I := 0 to form1.ListBox1.Items.Count - 1 do begin st:=form1.ListBox1.Items.Strings[i]; if st'' then begin while pos('_', st)0 do begin sleep(100); j:=pos('_', st); delete(st,j,1); insert(form1.ListKod.Items.Strings[form1.ListKod.ItemIndex],st,j); if form1.ListKod.ItemIndex+1>form1.ListKod.Items.Count-1 then form1.ListKod.ItemIndex:=0 else form1.ListKod.ItemIndex:=form1.ListKod.ItemIndex+1; end; form1.Memo2.Text:=form1.Memo2.Text+st+' '; end else form1.Memo2.Text:=form1.Memo2.Text+#13#10; end; end; procedure TForm1.AdvGlowButton2Click(Sender: TObject); var i,j,k:integer; st, sp, slovo:string; //ST - строка, //SP - слово-паразит, //SLOVO - выделенное из строки слово begin {Выбор метода расшифровки} form2.AdvOfficeRadioGroup1.ItemIndex:=-1; form2.ShowModal; if form2.AdvOfficeRadioGroup1.ItemIndex=-1 then exit; form1.ListBox1.Clear; {Загрузка информационного файла} if form2.AdvOfficeRadioGroup1.ItemIndex=0 then form1.ListKod.Items.LoadFromFile(form1.tekdir+'Простой код.txt'); if form2.AdvOfficeRadioGroup1.ItemIndex=1 then form1.ListKod.Items.LoadFromFile(form1.tekdir+'Средний код.txt'); if form2.AdvOfficeRadioGroup1.ItemIndex=2 then form1.ListKod.Items.LoadFromFile(form1.tekdir+'Сложный код.txt'); {Разбивка текста на строки, а затем на слова} for I := 0 to form1.Memo1.Lines.Count-1 do begin st:=form1.Memo1.Lines.Strings[i]; if st[length(st)]' ' then st:=st+' '; while pos(' ',st)0 do begin j:=pos(' ',st); slovo:=copy(st,1,j-1); delete(st,1,j); //Обрабатываем слово на уже известные слова-паразиты for k := 0 to form1.ListKod.Items.Count - 1 do begin sp:=form1.ListKod.Items.Strings[k]; while pos(sp, slovo)0 do begin j:=pos(sp, slovo); delete(slovo,j,length(sp)); end; end; form1.ListBox1.Items.Add(slovo); end; form1.ListBox1.Items.Add(''); end; for I := 0 to form1.ListBox1.Items.Count-1 do begin if form1.ListBox1.Items.Strings[i]='' then form1.Memo2.Text:=form1.Memo2.Text+#13#10 else form1.Memo2.Text:=form1.Memo2.Text+form1.ListBox1.Items.Strings[i]+' '; end; end; procedure TForm1.AdvGlowButton3Click(Sender: TObject); begin close; end; begin form3.ShowModal; end; end. unit MetodShifra_Forma;interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, AdvSmoothLabel, ExtCtrls, AdvPanel, AdvGlowButton, StdCtrls, AdvGroupBox, AdvOfficeButtons, Buttons; type TForm2 = class(TForm) AdvPanel1: TAdvPanel; AdvSmoothLabel1: TAdvSmoothLabel; AdvOfficeRadioGroup1: TAdvOfficeRadioGroup; AdvGlowButton3: TAdvGlowButton; AdvGlowButton1: TAdvGlowButton; SpeedButton1: TSpeedButton; SpeedButton2: TSpeedButton; SpeedButton3: TSpeedButton; procedure AdvGlowButton3Click(Sender: TObject); procedure SpeedButton1Click(Sender: TObject); procedure AdvGlowButton1Click(Sender: TObject); procedure SpeedButton2Click(Sender: TObject); procedure SpeedButton3Click(Sender: TObject); private { Private declarations } public { Public declarations } end; Form2: TForm2; begin close; end; begin form2.AdvOfficeRadioGroup1.ItemIndex:=-1; close; end; begin form2.AdvOfficeRadioGroup1.ItemIndex:=0; form4.AdvSmoothLabel1.Caption.Text:='Простой код'; form4.Edit1.Text:=''; form4.ListBox1.Items.LoadFromFile(form1.tekdir+form4.AdvSmoothLabel1.Caption.Text+'.txt'); form4.ShowModal; end; begin form2.AdvOfficeRadioGroup1.ItemIndex:=1; form4.AdvSmoothLabel1.Caption.Text:='Средний код'; form4.ListBox1.Items.LoadFromFile(form1.tekdir+form4.AdvSmoothLabel1.Caption.Text+'.txt'); form4.ShowModal; end; begin form2.AdvOfficeRadioGroup1.ItemIndex:=2; form4.AdvSmoothLabel1.Caption.Text:='Сложный код'; form4.ListBox1.Items.LoadFromFile(form1.tekdir+form4.AdvSmoothLabel1.Caption.Text+'.txt'); form4.ShowModal; end; unit RedaktorKoda_Forma;interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, AdvPanel, Buttons, StdCtrls, AdvGlowButton, AdvSmoothLabel, ExtCtrls; TForm4 = class(TForm) AdvPanel1: TAdvPanel; AdvSmoothLabel1: TAdvSmoothLabel; AdvGlowButton3: TAdvGlowButton; AdvGlowButton1: TAdvGlowButton; ListBox1: TListBox; Edit1: TEdit; SpeedButton1: TSpeedButton; SpeedButton2: TSpeedButton; SpeedButton3: TSpeedButton; AdvSmoothLabel2: TAdvSmoothLabel; procedure AdvGlowButton3Click(Sender: TObject); procedure SpeedButton2Click(Sender: TObject); procedure ListBox1Click(Sender: TObject); procedure SpeedButton1Click(Sender: TObject); procedure SpeedButton3Click(Sender: TObject); procedure AdvGlowButton1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; Form4: TForm4; implementation uses MetodShifra_Forma, Gl_forma; {$R *.dfm} {Сохранение} procedure TForm4.AdvGlowButton1Click(Sender: TObject); begin form4.ListBox1.Items.SaveToFile(form1.tekdir+form4.AdvSmoothLabel1.Caption.Text+'.txt'); close; end; begin close; end; procedure TForm4.ListBox1Click(Sender: TObject); begin form4.Edit1.Text:=form4.ListBox1.Items.Strings[form4.ListBox1.ItemIndex]; end; procedure TForm4.SpeedButton1Click(Sender: TObject); begin if form4.Edit1.Text='' then exit; if form4.ListBox1.Items.IndexOf(form4.Edit1.Text)-1 then exit; form4.ListBox1.Items.Strings[form4.ListBox1.ItemIndex]:=Form4.Edit1.Text; end; procedure TForm4.SpeedButton2Click(Sender: TObject); begin if form4.Edit1.Text='' then exit; if form4.ListBox1.Items.IndexOf(form4.Edit1.Text)-1 then exit; form4.ListBox1.Items.Add(form4.Edit1.Text); form4.Edit1.Text:=''; end; procedure TForm4.SpeedButton3Click(Sender: TObject); begin form4.ListBox1.Items.Delete(form4.ListBox1.ItemIndex); end; end. unit About_Forma;interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, AdvPanel, ExtCtrls, AdvGlowButton; TForm3 = class(TForm) AdvPanel1: TAdvPanel; AdvGlowButton1: TAdvGlowButton; Label1: TLabel; procedure AdvGlowButton1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; Form3: TForm3; implementation uses Gl_forma; {$R *.dfm} procedure TForm3.AdvGlowButton1Click(Sender: TObject); begin close; end; end. |
|