Курсовая работа на тему Криптография. «Тарабарский код» - umotnas.ru o_O
Главная
Поиск по ключевым словам:
страница 1
Похожие работы
Название работы Кол-во страниц Размер
Курсовая работа по дисциплине «Статистика» на тему «Статистические... 1 205.84kb.
Курсовая работа по дисциплине «Статистика» на тему «Статистические... 4 847.59kb.
Курсовая работа по дисциплине: "Прогнозирование в условиях рынка"... 1 125.42kb.
Курсовая работа На тему: Экстремумы 2006г 1 149.32kb.
Курсовая работа по сестринскому делу на тему Биомедицинская этика 2 652.49kb.
Курсовая работа на тему "Прогнозирование временных рядов" 1 160.97kb.
Криптография 1 230.18kb.
Сочинение на заданную тему. Исследовательская работа 1 117.65kb.
Курсовая работа по "Вычислительной математике" на тему: "Некоторые... 1 217.83kb.
Курсовая работа подготовлена нашими специалистами в 2008 году и была... 4 536.34kb.
Защита информации. Криптография 2 593.27kb.
Программа дисциплины «Теория информационных технологий и систем» 1 144.02kb.
Викторина для любознательных: «Занимательная биология» 1 9.92kb.

Курсовая работа на тему Криптография. «Тарабарский код» - страница №1/1

Курсовая работа на тему

Криптография. «Тарабарский код»




Введение


Криптогра́фия (от греч. κρυπτός — скрытый и γράφω — пишу) — наука о методах обеспечения конфиденциальности (невозможности прочтения информации посторонним) и аутентичности (целостности и подлинности авторства, а также невозможности отказа от авторства) информации.

Изначально криптография изучала методы шифрования информации — обратимого преобразования открытого (исходного) текста на основе секретного алгоритма и/или ключа в шифрованный текст (шифртекст). Традиционная криптография образует раздел симметричных криптосистем, в которых зашифрование и расшифрование проводится с использованием одного и того же секретного ключа. Помимо этого раздела современная криптография включает в себя асимметричные криптосистемы, системы электронной цифровой подписи (ЭЦП), хеш-функции, управление ключами, получение скрытой информации, квантовую криптографию.

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

Криптография — одна из старейших наук, ее история насчитывает несколько тысяч лет.



Криптосистема — семейство обратимых преобразований открытого текста в шифрованный.

Шифрование — процесс нормального применения криптографического преобразования открытого текста на основе алгоритма и ключа, в результате которого возникает шифрованный текст.

Расшифровывание — процесс нормального применения криптографического преобразования шифрованного текста в открытый.

До нашего времени криптография занималась исключительно конфиденциальностью сообщений (то есть зашифровкой) — преобразованием сообщений из понятной формы в непонятную и обратное восстановление на стороне получателя, делая его нечитаемым для перехватившего или подслушавшего без секретного знания (а именно ключа, необходимого для дешифровки сообщения). В последние десятилетия область применения криптографии расширилась и включает не только тайную передачу сообщений, но и методы проверки целостности сообщений, идентификации получателя/отправителя сообщения, цифровую подпись, интерактивную проверку, защищённые вычисления и другие.

Основные классические виды шифрования ― это перестановочное шифрование, при котором буквы сообщения переставляются (например «помоги мне» превращается в «опомиг нме» при простейшей схеме перестановки) и замещающий шифр, когда буквы или группы букв по определённому правилу заменяются на другие буквы или группы букв (например «fly at once» становится «gmz bu podf» при замене каждой буквы следующей за ней в алфавите). Простейшие версии обоих шифров — не более чем небольшая защита от любопытных. Первым замещающим шифром был шифр Цезаря, в котором каждая буква исходного текста заменялась буквой, стоящей на некоторое фиксированное число мест дальше в алфавите. Назван этот шифр в честь Юлия Цезаря, который, как сообщается, использовал шифр со смещением 3 при связи со своими полководцами во время военных кампаний.

Развитие компьютерной техники и электроники после Второй мировой сделало возможным использование более сложных шифров. Более того, компьютеры позволили шифровать любые данные, которые представимы в цифровом бинарном виде, в отличие от классических шифров, которые предназначались только для шифрования написанных текстов. Это привело к непригодности лингвистических методов криптоанализа для большинства случаев, так как многие компьютерные шифры характеризуются работой с последовательностями битов (возможно сгруппированных в блоки), в то время как классические и механические схемы обычно манипулировали традиционными знаками (буквами и цифрами). С другой стороны, компьютеры помогают криптоанализу, что может компенсировать усложнение шифров.

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

Задача: написать программу, которая сможет шифровать и расшифровывать тексты по «Тарабарскому» способу.


В средние века на Руси был популярен «тарабарский» способ

шифрования речи.

Для кодирования между слогами слов размещались вспомога-тельные словечки «тара» и «бара». Так, забавный текст: «тарапойба-радем тарагубаралять» означает обычную фразу «пойдем гулять».

Так как разработка искусственного интелекта не входит в условие задачи, то был выбран способ решения задачи путём контроля пользователем процесса дешифровки. Т.е. сформировать словари «слов-паразитов» и возможность их редактирования пользователем.
Алгоритм шифрования:


  1. Принять фразу.

  2. Разбить на слова.

  3. Слова разбить на слоги.

  4. К каждому слогу последовательно добавлять «слово-паразит» из словаря.

Алгоритм дешифровки:



  1. Принять текст.

  2. Исключить из текста известные «слова-паразиты».

  3. Предоставить пользователю редактировать список «слов-паразитов»

Проограмма разработана на языке Delphi.



Рисунок Среда разработки. Основная форма


Для создания более приятного и привычного интерфейса был выбран пакет визульных компонентов TMS pack 5.0
При старте программы мы получаем основное окно:

Рисунок Основное окно программы


В поле «Исходный текст» вводится/вставляется текст, подлежащий шифрации/дешифрации.

Процесс шифрации/дешифрации выбирается кнопками «Зашифровать» и «Расшифровать».

При нажатии кнопки «Зашифровать» появляется диалог выбора алгоритма шифрования

Рисунок Диалог выбора метода шифрования

где выбираем уровень сложности шифрования.

Кнопки выводят диалог изменения/добавления/удаления «слов-паразитов» для выбранного уровня сложности. При нажатии кнопки «ОК» происвходит сохрание списка в текстовый файл.
Рисунок Редактор "слов-паразитов" по уровню сложности


После ввода текста в поле «исходный текст» и выбора сложности шифрования будет выдан зашифрованный текст

Рисунок Результат шифрования текста


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

Рисунок Результат работы программы при дешифровке



Вывод

Шифрацию текста по «Тарабарскому языку» вполне возможно автоматизировать, но дешифрация текста требует, хотя и минимального, участия пользователя.

Основным «стоповым» примером было выбрано слово «тараканище» абсолютно теряющее свой смысл после дешифрации.

Т.е. алгоритм дешифрации еще требует доработки, но, в основном, им можно вполне нормально пользоваться.



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





  1. Криптография — Википедия. http://www.google.ru/search?hl=ru&source=hp&q=%D0%BA%D1%80%D0%B8%D0%BF%D1%82%D0%BE%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D1%8F+%D0%B2%D0%B8%D0%BA%D0%B8%D0%BF%D0%B5%D0%B4%D0%B8%D1%8F&btnG=%D0%9F%D0%BE%D0%B8%D1%81%D0%BA+%D0%B2+Google&lr=&aq=1&oq=%D0%BA%D1%80%D0%B8%D0%BF%D1%82%D0%BE%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D1%8F

  2. «HackZona – территория взлома». Криптография для чайников http://www.fssr.ru/hz.php?name=News&file=article&sid=8100

  3. Форум программистов и сисадминов. Delphi для начинающих Вопросы начинающих по Delphi. http://www.cyberforum.ru/delphi-beginners/



Текст программы

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;
var

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;
procedure TForm1.Work(slovo:string);

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;
procedure TForm1.AdvGlowButton1Click(Sender: TObject);

var

i,j,k:longint;



st,slovo:string;

begin


form2.AdvOfficeRadioGroup1.ItemIndex:=-1;

form2.ShowModal;

if form2.AdvOfficeRadioGroup1.ItemIndex=-1 then exit;
form1.ListBox1.Clear;

{Разбиение строк на слова}

form1.Initialisation;
{Формирование списка слов, разбитых на слоги. Пустая строка - Enter}

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;
procedure TForm1.SpeedButton1Click(Sender: TObject);

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;
var

Form2: TForm2;
implementation
uses RedaktorKoda_Forma, Gl_forma;
{$R *.dfm}
procedure TForm2.AdvGlowButton1Click(Sender: TObject);

begin


close;

end;
procedure TForm2.AdvGlowButton3Click(Sender: TObject);

begin

form2.AdvOfficeRadioGroup1.ItemIndex:=-1;



close;

end;
procedure TForm2.SpeedButton1Click(Sender: TObject);

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;
procedure TForm2.SpeedButton2Click(Sender: TObject);

begin


form2.AdvOfficeRadioGroup1.ItemIndex:=1;

form4.AdvSmoothLabel1.Caption.Text:='Средний код';

form4.ListBox1.Items.LoadFromFile(form1.tekdir+form4.AdvSmoothLabel1.Caption.Text+'.txt');

form4.ShowModal;

end;
procedure TForm2.SpeedButton3Click(Sender: TObject);

begin


form2.AdvOfficeRadioGroup1.ItemIndex:=2;

form4.AdvSmoothLabel1.Caption.Text:='Сложный код';

form4.ListBox1.Items.LoadFromFile(form1.tekdir+form4.AdvSmoothLabel1.Caption.Text+'.txt');

form4.ShowModal;

end;
end.

unit RedaktorKoda_Forma;

interface


uses

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

Dialogs, AdvPanel, Buttons, StdCtrls, AdvGlowButton, AdvSmoothLabel, ExtCtrls;
type

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;
var

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;
procedure TForm4.AdvGlowButton3Click(Sender: TObject);

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;
type

TForm3 = class(TForm)

AdvPanel1: TAdvPanel;

AdvGlowButton1: TAdvGlowButton;

Label1: TLabel;

procedure AdvGlowButton1Click(Sender: TObject);

private

{ Private declarations }



public

{ Public declarations }

end;
var

Form3: TForm3;


implementation
uses Gl_forma;
{$R *.dfm}
procedure TForm3.AdvGlowButton1Click(Sender: TObject);

begin


close;

end;
end.