Исследование и программная реализация шифра Виженера - Курсовая работа

бесплатно 0
4.5 99
Описание схемы "шифр Виженера" как простой формой многоалфавитной замены и создание программы на языке программирования высокого уровня, позволяющей зашифровать и дешифровать сообщение. Ручной пересчет шифрования и подтверждение его работой программы.

Скачать работу Скачать уникальную работу

Чтобы скачать работу, Вы должны пройти проверку:


Аннотация к работе
Это такие шифры, в котором каждой букве алфавита соответствует буква, цифра, символ или какая-нибудь их комбинация. В этом случае для каждого символа употребляют тот или иной алфавит в зависимости от ключа, который связан каким-нибудь способом с самим символом или с его порядком в передаваемом сообщении. В процессе шифрования (и дешифрования) используется таблица ("таблица Виженера"), которая устроена следующим образом: в первой строке выписывается весь алфавит, в каждой следующей осуществляется циклический сдвиг на одну букву. Шифр Виженера «размывает» характеристики частот появления символов в тексте, но некоторые особенности появления символов в тексте остаются. {$R *.dfm} procedure TFORM1.Button1Click(Sender: TOBJECT);//---Кнопка зашифровки begin s:=Edit1.Text; /-исходный текст k:=Edit2.Text; /-ключВ проделанной работе был программно реализован шифр «Виженера». Программа осуществляет шифрование и дешифрование текста написанного на одном из двух алфавитов - кириллица, латиница. Для корректной работы программы шифруемое сообщение и ключ должны содержать в себе символы из одного алфавита.

План
Оглавление

Введение

Шифр виженера

Листинг программы

Демонстрация работы программы

Общий вывод

Список используемой литературы

Введение
Криптография (от др.-греч. ??????? - скрытый и ????? - пишу) - наука о методах обеспечения конфиденциальности (невозможности прочтения информации посторонним) и аутентичности (целостности и подлинности авторства, а также невозможности отказа от авторства) информации.

Потребность шифровать и передавать шифрованные сообщения возникла очень давно. Так, еще в V-IV вв. до н. э. греки применяли специальное шифрующее устройство. Первые придуманные шифры относились к классу шифров «простая замена» или «подстановка». Это «Квадрат Полибия», «Шифр Цезаря». Это такие шифры, в котором каждой букве алфавита соответствует буква, цифра, символ или какая-нибудь их комбинация. Термин "шифр" арабского происхождения. В начале XV в. арабы опубликовали энциклопедию "Шауба Аль-Аща", в которой есть специальный раздел о шифрах. В этой энциклопедии указан способ раскрытия шифра простой замены. Он основан на различной частоте повторяемости букв в тексте. В этом разделе есть перечень букв в порядке их повторяемости на основе изучения текста Корана. Заметим, что в русском тексте чаще всего встречается буква "О", затем буква "Е" и на третьем месте стоят буквы "И" и "А". Более точно: на 1000 букв русского текста в среднем приходится 90 букв "О", 72 буквы "Е" или "Е" и по 60 букв "И" и "А" и т.д.

Неудобство шифров типа "подстановка" ("простая замена") в случае использования стандартного алфавита очевидно. Таблица частот встречаемости букв алфавита позволяет определить один или несколько символов, а этого иногда достаточно для дешифрования всего сообщения. Поэтому обычно пользуются разными приемами, чтобы затруднить дешифрование. Для этой цели используют многобуквенную систему шифрования - систему, в которой одному символу отвечает одна или несколько комбинаций двух и более символов. Другой прием - использование нескольких алфавитов. В этом случае для каждого символа употребляют тот или иной алфавит в зависимости от ключа, который связан каким-нибудь способом с самим символом или с его порядком в передаваемом сообщении. В процессе шифрования (и дешифрования) используется таблица ("таблица Виженера"), которая устроена следующим образом: в первой строке выписывается весь алфавит, в каждой следующей осуществляется циклический сдвиг на одну букву. Так получается квадратная таблица, число строк которой равно числу столбцов и равно числу букв в алфавите.

Шифр виженера

Шифр Виженера - метод полиалфавитного шифрования буквенного текста с использованием ключевого слова.

Этот метод является простой формой многоалфавитной замены. Шифр Виженера изобретался многократно. Впервые этот метод описал Джован Баттиста Беллазо (итал. Giovan Battista Bellaso) в книге La cifra del. Sig. Giovan Battista Bellaso в 1553 году, однако в XIX веке получил имя Блеза Виженера , французского дипломата. Метод прост для понимания и реализации, он является недоступным для простых методов криптоанализа .

Блез Виженер представил свое описание простого, но стойкого шифра перед комиссией Генриха III во Франции в 1586 году, и позднее изобретение шифра было присвоено именно ему. Давид Кан в своей книге «Взломщики кодов» отозвался об этом осуждающе, написав, что история «проигнорировала важный факт и назвала шифр именем Виженера, несмотря на то, что он ничего не сделал для его создания».

Шифр Виженера имел репутацию исключительно стойкого к «ручному» взлому. Известный писатель и математик Чарльз Лютвидж Доджсон (Льюис Кэрролл ) назвал шифр Виженера невзламываемым в своей статье «Алфавитный шифр» англ. The Alphabet Cipher, опубликованной в детском журнале в 1868 году. В 1917 году Scientific American также отозвался о шифре Виженера, как о неподдающемся взлому. Это представление было опровергнуто после того, как Касиски полностью взломал шифр в XIX веке, хотя известны случаи взлома этого шифра некоторыми опытными криптоаналитиками еще в XVI веке.

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

Описание алгоритма

В шифре Цезаря каждая буква алфавита сдвигается на несколько строк; например в шифре Цезаря при сдвиге 3, A стало бы D, B стало бы E и так далее. Шифр Виженера состоит из последовательности нескольких шифров Цезаря с различными значениями сдвига. Для зашифровывания может использоваться таблица алфавитов, называемая tabula recta или квадрат (таблица) Виженера. Применительно к латинскому алфавиту таблица Виженера составляется из строк по 26 символов, причем каждая следующая строка сдвигается на несколько позиций. Таким образом, в таблице получается 26 различных шифров Цезаря. На разных этапах кодировки шифр Виженера использует различные алфавиты из этой таблицы. На каждом этапе шифрования используются различные алфавиты, выбираемые в зависимости от символа ключевого слова.

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

Если буквы A-Z соответствуют числам 0-25, то шифрование Виженера можно записать в виде формулы:

Расшифровка:

Криптоанализ

Шифр Виженера «размывает» характеристики частот появления символов в тексте, но некоторые особенности появления символов в тексте остаются. Главный недостаток шифра Виженера состоит в том, что его ключ повторяется. Поэтому простой криптоанализ шифра может быть построен в два этапа: 1. Поиск длины ключа. Можно анализировать распределение частот в зашифрованном тексте с различным прореживанием. То есть брать текст, включающий каждую 2-ю букву зашифрованного текста, потом каждую 3-ю и т. д. Как только распределение частот букв будет сильно отличаться от равномерного (например, по энтропии), то можно говорить о найденной длине ключа.

2. Криптоанализ. Совокупность l шифров Цезаря (где l - найденная длина ключа), которые по отдельности легко взламываются.

Таблица Виженера для кириллицы:

шифр виженера программа пересчет

Таблица Виженера для латиницы:

Листинг программы unit Unit1;

interface uses

Windows, Messages, SYSUTILS, Variants, Classes, Graphics, Controls, Forms, Dialogs, STDCTRLS;

type

TFORM1 = class(TFORM)

Label1: TLABEL;

Label2: TLABEL;

Edit1: TEDIT;

Label3: TLABEL;

Edit2: TEDIT;

Button1: TBUTTON;

Button2: TBUTTON;

Label4: TLABEL;

Edit3: TEDIT;

Button3: TBUTTON;

procedure Button1Click(Sender: TOBJECT);

procedure Button2Click(Sender: TOBJECT);

procedure Button3Click(Sender: TOBJECT);

private

{ Private declarations } public

{ Public declarations } end;

var

Form1: TFORM1;

i, z, n, l, p : integer;

s, k, e :string;

implementation

{$R *.dfm} procedure TFORM1.Button1Click(Sender: TOBJECT);//---Кнопка зашифровки begin s:=Edit1.Text; /-исходный текст k:=Edit2.Text; /-ключ

Edit3.Text:="";

for i:=1 to length(s) do begin z:=ord(s[i]); /-перевод в ASCII код l:=length(k);

p:=i;

//-Циклическое считывание ключа if p>l then begin p:=(p)mod(l);

if p=0 then p:=l else p:=p;

end else p:=p;

n:=ord(k[p]);

//-Кириллица заглавные if ((z>=192) and (z=192) and (n<=255)) then begin z:=(z-191);

if n>=224 then n:=n-223 else n:=n-191;

z:=((z n)mod(32)) 191-1;

if z<192 then z:=z 32 else z:=z;

Edit3.Text:= Edit3.Text chr(z);

end

//-Кириллица строчнык else if ((z>=224) and (z=192) and (n<=255)) then begin z:=(z-223);

if n>=224 then n:=n-223 else n:=n-191;

z:=223-1 (z n)mod(32);

if z<224 then z:=z 32 else z:=z;

Edit3.Text:= Edit3.Text chr(z);

end

//-Латиница заглавные else if ((z>=65) and (z=65) and (n=97) and (n<=122))) then begin z:=(z-64);

if n>=97 then n:=n-96 else n:=n-64;

z:=64-1 (z n)mod(26);

if z<65 then z:=z 26 else z:=z;

Edit3.Text:= Edit3.Text chr(z);

end

//-Латиница сточные else if ((z>=97) and (z=65 )and (n=97) and (n<=122))) then begin z:=(z-96);

if n>=97 then n:=n-96 else n:=n-64;

z:=96-1 (z n)mod(26);

if z<97 then z:=z 26 else z:=z;

Edit3.Text:= Edit3.Text chr(z);

end

//-Если шифруемое сообщение не входит в алфавит (.,! ? и т.д.) else if (z90) and (z122) and (z64) and (n96) and (n191)) then

Edit3.Text:= Edit3.Text chr(z)

//-Если в ключ входят символы не из алфавита (.,! ? и т.д.) else if (n90) and (n122) and (n<192)) then begin

SHOWMESSAGE("Введен некорректный ключ. Ключ не должен содержать символы");

Edit3.Text:="";

break;

end

//---Использование разных алфавитов else begin

SHOWMESSAGE("Ключ и текст должны содержать символы из одного алфавита");

Edit3.Text:="";

break;

end;

end;

end;

procedure TFORM1.Button2Click(Sender: TOBJECT);//- Кнопка расшифровки begin

Edit3.Text:="";

s:=Edit1.Text;

k:=Edit2.Text;

for i:=1 to length(s) do begin z:=ord(s[i]);

l:=length(k);

p:=i;

//-Циклическое считывание ключа if p>l then begin p:=(p)mod(l);

if p=0 then p:=l else p:=p;

end else p:=p;

n:=ord(k[p]);

//-Кириллица заглавные if ((z>=192) and (z=192) and (n<=255)) then begin z:=(z-191);

if n>=224 then n:=n-223 else n:=n-191;

z:=((z-n)mod(32)) 191 1;

if z<192 then z:=z 32 else z:=z;

Edit3.Text:= Edit3.Text chr(z);

end

//-Кириллица строчнык else if ((z>=224) and (z=192) and (n<=255)) then begin z:=(z-223);

if n>=224 then n:=n-223 else n:=n-191;

z:=223 1 (z-n)mod(32);

if z<224 then z:=z 32 else z:=z;

Edit3.Text:= Edit3.Text chr(z);

end

//-Латиница заглавные else if ((z>=65) and (z=65) and (n=97) and (n<=122))) then begin z:=(z-64);

if n>=97 then n:=n-96 else n:=n-64;

z:=64 1 (z-n)mod(26);

if z<65 then z:=z 26 else z:=z;

Edit3.Text:= Edit3.Text chr(z);

end

//-Латиница сточные else if ((z>=97) and (z=65 )and (n=97) and (n<=122))) then begin z:=(z-96);

if n>=97 then n:=n-96 else n:=n-64;

z:=96 1 (z-n)mod(26);

if z<97 then z:=z 26 else z:=z;

Edit3.Text:= Edit3.Text chr(z);

end

//-Если шифруемое сообщение не входит в алфавит (.,! ? и т.д.) else if (z90) and (z122) and (z64) and (n96) and (n191)) then

Edit3.Text:= Edit3.Text chr(z)

//-Если в ключ входят символы не из алфавита (.,! ? и т.д.) else if (n90) and (n122) and (n<192)) then begin

SHOWMESSAGE("Введен некорректный ключ. Ключ не должен содержать символы");

Edit3.Text:="";

break;

end

//---Использование разных алфавитов else begin

SHOWMESSAGE("Ключ и текст должны содержать символы из одного алфавита");

Edit3.Text:="";

break;

end;

end;

end;

procedure TFORM1.Button3Click(Sender: TOBJECT);

begin

Close();

end;

end.

//-------------------------------------------------------------------------

Демонстрация работы программы

Рис.1 Диалоговое окно программы.

Для начала работы программы в поле «Исходный текст» следует записать открытое сообщение, в поле «Ключ» записать ключ шифрования. Нажать кнопку «Зашифровать». В качестве контрольного примера выбрана цитата «Дайте человеку цель, ради которой стоит жить, и он сможет выжить в любой ситуации», а в качестве ключа используется имя автора этих слов «ИОГАННГЕТЕ».

Открытое сообщение: «Дайте человеку цель, ради которой стоит жить, и он сможет выжить в любой ситуации».

Ключ: «ИОГАННГЕТЕ».

Рис.2 Пример шифрования

Получено зашифрованное сообщение: «Момтт ъкэукуну гиро, югдх нудушьм юяснд оцхь, л ат япоутх фаоцхь п рржцч схяцеинр». Для дешифрования зашифрованный текст следует записать в поле «Текст» и нажать кнопку «Расшифровать»

Рис.3 Пример дешифрования.

Для корректной работы программы должны выполняться следующие условия: 1. Исходный текст и ключ должны быть из одного алфавита.

2. Ключ не должен содержать сиволов не из алфавита, т.е не должен содержать знаков препинания, пробелов и т.п.

При не выполнении условий появятся сообщения (Рис.4, Рис.5).

Рис.4. Использование разных алфавитов

Рис. 5. Использование пробела в ключе шифрования.

Вывод
В проделанной работе был программно реализован шифр «Виженера». Данная программа написана в программной среде Delphi 7. Программа осуществляет шифрование и дешифрование текста написанного на одном из двух алфавитов - кириллица, латиница. Для корректной работы программы шифруемое сообщение и ключ должны содержать в себе символы из одного алфавита. Так же ключ не должен содержать в себе пробелов, знаков пунктуации и иных символов не входящих в алфавит. Данный шифр долго считался криптоскойким к ручному взлому так как метод шифрования скрывает частоту появления символов связанную с особенностями языка. Это обусловлено тем что один символ может быть заменен на любой символ алфавита в зависимости от ключа. Так же стойкость этого алгоритма повышается с длинной ключа. Максимально стойким алгоритм будет при соизмеримости ключа и исходного текста.

Размещено на .ru

Вы можете ЗАГРУЗИТЬ и ПОВЫСИТЬ уникальность
своей работы


Новые загруженные работы

Дисциплины научных работ





Хотите, перезвоним вам?