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

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

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык русский
Дата добавления 28.04.2014
Размер файла 1,4 M

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru/

Задание на курсовое проектирование

по дисциплине «Криптографические методы защиты информации»

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

Оглавление

Введение

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

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

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

Общий вывод

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

Введение

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

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

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

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

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

Этот метод является простой формой многоалфавитной замены. Шифр Виженера изобретался многократно. Впервые этот метод описал Джован Баттиста Беллазо (итал. Giovan Battista Bellaso) в книге La cifra del. Sig. Giovan Battista Bellasо в 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<=223)) and ((n>=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<=255)) and ((n>=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<=90)) and (((n>=65) and (n<=90)) or ((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<=122)) and (((n>=65 )and (n<=90)) or ((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 (z<65) or ((z>90) and (z<97)) or ((z>122) and (z<192)) and (((n>64) and (n<91)) or ((n>96) and (n<123)) or (n>191)) then

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

//--Если в ключ входят символы не из алфавита (.,! ? и т.д.)

else if (n<65) or ((n>90) and (n<97)) or ((n>122) 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<=223)) and ((n>=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<=255)) and ((n>=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<=90)) and (((n>=65) and (n<=90)) or ((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<=122)) and (((n>=65 )and (n<=90)) or ((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 (z<65) or ((z>90) and (z<97)) or ((z>122) and (z<192)) and (((n>64) and (n<91)) or ((n>96) and (n<123)) or (n>191)) then

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

//--Если в ключ входят символы не из алфавита (.,! ? и т.д.)

else if (n<65) or ((n>90) and (n<97)) or ((n>122) 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. Программа осуществляет шифрование и дешифрование текста написанного на одном из двух алфавитов - кириллица, латиница. Для корректной работы программы шифруемое сообщение и ключ должны содержать в себе символы из одного алфавита. Так же ключ не должен содержать в себе пробелов, знаков пунктуации и иных символов не входящих в алфавит. Данный шифр долго считался криптоскойким к ручному взлому так как метод шифрования скрывает частоту появления символов связанную с особенностями языка. Это обусловлено тем что один символ может быть заменен на любой символ алфавита в зависимости от ключа. Так же стойкость этого алгоритма повышается с длинной ключа. Максимально стойким алгоритм будет при соизмеримости ключа и исходного текста.

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

...

Подобные документы

  • Проблема скрытия и защиты информации от несанкционированного использования. История создания шифра. Решения задачи шифрования текста и кодирования данных. Тестирование полученного приложения и анализ работы программы с точки зрения пользователя.

    курсовая работа [3,0 M], добавлен 24.11.2013

  • Реализация криптографического алгоритма шифрования и дешифрования с использованием шифра Виженера. Понятие и суть полиалфавитного шифра. Метод полиалфавитного шифрования буквенного текста с использованием ключевого слова. Взлом полиалфавитных шифров.

    курсовая работа [863,0 K], добавлен 21.04.2012

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

    курсовая работа [45,0 K], добавлен 13.11.2009

  • Принцип работы и программная реализация однозвучного, одноалфавитного и полиграммного шифра. Шифрование по методу подстановки, замены и кодового слова. Безопасность шифровки простой замены. Частотные характеристики текстовых сообщений и дешифрация.

    контрольная работа [1,1 M], добавлен 02.02.2012

  • Схема работы и требования к программам шифрования и дешифрования. Алгоритмы и тексты программы шифрования и программы дешифрования, выполненные на языке программирования C/C++. Содержание файла с исходным текстом, с шифротекстом, с дешифрованным текстом.

    курсовая работа [24,7 K], добавлен 20.10.2014

  • Реализация программы, кодирующей входную строку, используя аффинный и аффинный рекуррентный шифр. Пример шифрования с помощью аффинного шифра. Описание алгоритма работы программы. Ознакомление с криптоанализом. Частота использования английских букв.

    отчет по практике [445,6 K], добавлен 22.11.2016

  • Краткая характеристика библиотек: stdio.h, conio.h, string.h, stdafx.h. Шифр Плейфера как подстановка символов из таблицы, основные варианты. Структура программы playfer.exe. Создание таблицы перекодировки. Ввод, шифрование и дешифрование текста.

    курсовая работа [216,7 K], добавлен 18.05.2013

  • Сравнительный анализ языков программирования высокого уровня Си и Паскаль. Реализация алгоритма обработки данных. Тестирование и отладка программы или пакета программ. Структура программы на языке Турбо Паскаль. Указатели и векторные типы данных.

    курсовая работа [233,5 K], добавлен 14.12.2012

  • Понятие информационной безопасности. История развития криптографии. Функции информационных моделей. Переменные, используемые при разработке прикладной программы для шифрования и дешифрования сообщений с помощью шифра Цезаря. Блок-схема общего алгоритма.

    курсовая работа [975,5 K], добавлен 11.06.2014

  • Ознакомление с возможностями языка Си как средой программирования высокого уровня. Циклы программирования параметрического оператора for и функции форматированного ввода. Разработка программы средствами Си: блок-схема, текст и тестирование программы.

    контрольная работа [204,4 K], добавлен 26.01.2013

  • Исследование симметричных алгоритмов блочного шифрования. Минусы и плюсы алгоритма IDEA. Разработка программы аутентификации пользователя и сообщений на основе алгоритма IDEA. Выбор языка программирования. Тестирование и реализация программного средства.

    курсовая работа [314,2 K], добавлен 27.01.2015

  • Сравнительный анализ наиболее распространенных языков, их классификация, описание достоинств и недостатков. Использование процедур, функции и подпрограмм в языках программирования высокого уровня. Разработка и реализация программы "Бортовой компьютер".

    курсовая работа [329,8 K], добавлен 22.06.2014

  • Программа на языке Turbo Pascal для шифрования данных с помощью шифра Тритемиуса. Входные, выходные данные. Схема алгоритма и текст программы. Порядок ввода исходных данных и описание получаемых результатов. Тестовых задания и анализ их функционирования.

    курсовая работа [4,0 M], добавлен 06.01.2011

  • Принцип программной реализации классических криптографических методов. Метод шифрования с использованием таблицы Виженера. Создание текстового редактора "Блокнот", содержащего методы шифрования. Вербальный алгоритм и программа для методов шифрования.

    курсовая работа [2,0 M], добавлен 20.01.2010

  • История появления и развития шифрования текста. Проблема шифрования и дешифрования текстовых сообщений в современности. Создание программы для зашифровки и расшифровки вводимого текста пятью методами: Атбаш, Цезаря, Полибия, Гронсфельда и Винжера.

    курсовая работа [923,6 K], добавлен 26.12.2011

  • Анализ затрат и прибыли. Создание программного проекта для решения задачи о прибыли и убытках на языке программирования C#. Использование функций и переменных, компиляция программы. Алгоритмы и структуры данных. Тестирование программного обеспечения.

    курсовая работа [1,2 M], добавлен 03.01.2015

  • Создание программы, реализующей игру "Линии". Среда разработки программы, описание ее общего вида. Основные алгоритмы программы. Реализация программы в среде разработки Microsoft Visual Studio 2008 на языке объектно-ориентированного программирования С++.

    курсовая работа [639,0 K], добавлен 16.03.2012

  • Создание параллельной программы на языке программирования высокого уровня С с расширением MPI и аналогичной программы на OpenMP для решения двумерного уравнения Пуассона итерационным методом Зейделя. Блок-схема алгоритма, анализ работы программы.

    контрольная работа [62,9 K], добавлен 06.01.2013

  • Сравнительный анализ языков программирования высокого уровня Си и Паскаль: структура программы, типы данных, арифметические операции, операторы ветвления и циклы. Создание программы поиска подпоследовательностей одинаковых элементов в множественном виде.

    курсовая работа [78,9 K], добавлен 28.12.2012

  • Формулировка, спецификация и математическая постановка задачи. Описание схемы алгоритма. Рассмотрение результата машинного тестирования программы. Получение на занятиях навыков алгоритмизации и программирования задач на языке высокого уровня C#.

    курсовая работа [268,2 K], добавлен 22.03.2015

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.