Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Kursak_III.doc
Скачиваний:
162
Добавлен:
20.03.2015
Размер:
311.81 Кб
Скачать

2.2. Разработка программы в Delphi

В начале были объявлены все переменные, использующиеся в демонстрационной программе. Далее программе необходимо прочитать ключ:

key:=strtoint(labelededit1.Text); // чтение ключа

if sender = form1.Button2 then // расшифровка

mem:=memo2.Lines.Count; // количество строк

memo1.Lines.Clear // очищение мемо

begin // шифрование

mem:=memo1.Lines.Count;

memo2.Lines.Clear

for i:=0 to mem-1 do // цикл по строкам

if sender=form1.Button2 then // обработка строки

ssin:=memo2.Lines.Strings[i]

else

ssin:=memo1.lines.Strings[i];

sout:='';

for j:=1 to length(ssin) do // цикл по строке

if ssin[j] in [' ', '.', ',' , ':' , ';'] then

sout:=sout+ssin[j]

else

if (ssin[j] in ['a'..'z']) then

{v:=90;n:=65;k:=26;}

arr:=Seng;

k:=26;

else

if (ssin[j] in ['A'..'Z']) then // проверка на наличие английского текста

begin

arr:=Beng;

k:=26;

else

if (ssin[j] in ['А'..'Я'])then // проверка на наличие русского текста

h:=(h-key) mod length(arr);

if h<=0 then h:=length(arr)+h;

else

h:=(getnumber(ssin[j], arr));

h:=(h+key) mod length(arr);

if h=0 then h:=length(arr)

else if h<0 then

h:=length(arr)-(-h mod length(arr));

sout:=sout+arr[h];

if sender=form1.Button2 then

memo1.Lines.Add(sout)

else

memo2.Lines.Add(sout);

procedure Tform1.Lowertext(mem: TMemo);

var i,k:integer;

s:string;

begin

k:=mem.Lines.Count-1;

for i:=k downto 0 do

s:=Pchar(mem.lines.strings[k]);

s:=AnsiStrLower(Pchar(s));

mem.Lines.Delete(k);

mem.lines.Insert(0,s)

function getnumber(ch:char; var arr:string):integer;

var i:byte;

begin

for i:=1 to length(arr) do

if ch=arr[i] then break;

result:=i;

end;

Далее нужно осуществить выбор из выпадающего списка:

procedure TForm1.Button1Click(Sender: TObject); // по нажатию кнопки

case Combobox1.ItemIndex of // выбор метода из выпадающего списка

0: ceasar(sender); // метод цезаря

1: perest(sender); // метод перестановок

2: zamena(sender); // метод замены

3: invers(sender); // метод инверсии

4: viziner(sender); // метод Виженера

5: gamma(sender); // метод гаммирования

begin // Заполнение массива буквами русского и английского алфавита

sr:='ЙЦУКЕНГШЩЗХЪФЫВАПРОЛДЖЭЯЧСМИТЬБЮ';

SE:='QWERTYUIOPASDFGHJKLZXCVBNM';

if combobox1.ItemIndex=2 then

stringgrid1.Visible:=true; // включение параметра видимости на форме

stringgrid2.Visible:=true;

for i:=0 to length(Brus)-1 do // произведение замены символов со сдвигом

stringgrid1.Cells[i,0]:=Brus[i+1];

for i:=0 to length(Brus)-1 do

stringgrid1.Cells[i,1]:=sr[i+1];

for i:=0 to length(Beng)-1 do

stringgrid2.Cells[i,0]:=Beng[i+1];

for i:=0 to length(Beng)-1 do

stringgrid2.Cells[i,1]:=se[i+1];

memo1.Lines.Clear; // очистка поля Memo1

procedure TForm1.Button4Click(Sender: TObject);

memo2.Lines.Clear; // очистка поля Memo2

2.3. Инструкция пользователя

Для работы с программой необходимо запустить установочный файл JCryptorSetup.exe. Далее необходимо следовать инструкциям инсталлятора. По завершению установки программы на рабочем столе автоматически создастся ярлык исполняемого файла программы. После запуска ярлыка, перед пользователем откроется главное окно программы (см. рис. 2).

Рисунок 2. Главное окно программы

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

Рисунок 3. Результат дешифровки текстовой информации.

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

Шифр Цезаря — это вид шифра подстановки, в котором каждый символ в открытом тексте заменяется буквой находящейся на некоторое постоянное число позиций правее него в алфавите. Например, в шифре со сдвигом 3, А была бы заменена на Г, Б станет Д, и так далее.

Математическая модель.

Если сопоставить каждому символу алфавита его порядковый номер (нумеруя с 0), то шифрование и дешифрование можно выразить формулами модульной арифметики:

y=(x+k) mod n

x=(y-k) mod n

где x — символ открытого текста, y — символ шифрованного текста, n — мощность алфавита, а k — ключ.

Пример работы метода в программе (см. рис. 4)

Рисунок 4. Пример шифрования текста методом Цезаря

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

Пример работы метода в программе (см. рис. 5)

Рисунок 5. Пример шифрования текста методом перестановок

Метод замены

Сущность методов замены (подстановки) заключается в замене символов исходной информации, записанных в одном алфавите, символами из другого алфавита по определенному правилу. Самым простым является метод прямой замены. Символам s0i исходного алфавита A0, с помощью которых записывается исходная информация, однозначно ставятся в соответствие символы s1i шифрующего алфавита А1. В простейшем случае оба алфавита могут состоять из одного и того же набора символов. Например, оба алфавита могут содержать буквы русского алфавита. Задание соответствия между символами обоих алфавитов осуществляется с помощью преобразования числовых эквивалентов символов исходного текста Т0, длиной К символов, по определенному алгоритму. Алгоритм моноалфавитной замены может быть представлен в виде последовательности шагов.

Шаг 1. Формирование числового кортежа L0h путем замены каждого символа, представленного в исходном алфавите A0 размера [1xK], на число h0i(s0i), соответствующее порядковому номеру символа s0i в алфавите A0.

Шаг 2. Формирование числового кортежа L1h путем замены каждого числа кортежа L0h на соответствующее число h1i кортежа L1h, вычисляемое по формуле: hli=k1*h0i(s0i)+k2)(mod R), где k1 — десятичный коэффициент; k2 — коэффициент сдвига. Выбранные коэффициенты k1, k2 должны обеспечивать однозначное соответствие чисел h0i и h1i, а при получении h1i=0 выполнить замену h1i=R.

Шаг 3. Получение шифртекста Т1 путем замены каждого числа hli(sli) кортежа L1h соответствующим символом алфавита шифрования A1 размера [1xR]. Пример работы метода в программе (см. рис. 6).

Рисунок 6. Пример шифрования текста методом замены.

Шифр Виженера. — метод полиалфавитного шифрования буквенного текста. Этот метод является простой формой многоалфавитной замены. Шифр Виженера изобретался многократно.

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

Рисунок 7. Пример шифрования текста методом Виженера

Гаммирование — метод шифрования, основанный на «наложении» гамма-последовательности на открытый текст. Обычно это суммирование в каком-либо конечном поле. При расшифровке операция проводится повторно, в результате получается открытый текст. Сначала равновероятно и взаимосвязано генерируется 64 бита синхропосылки, которая разделяется на начальные левый и правый подблоки длиной по 32 бита. Подблоки синхропосылки зашифровываются в режиме простой замены в течение 32 циклов шифрования. Образованные в итоге 32-го цикла левый и правый подблоки записываются в накопителе и накопителе, как значения и соответственно. Заполнение накопителя складывается в сумматоре по модулю с 32-битовой криптографической константой. С выхода сумматора новое значение запоминается в накопителе. В течение 32 циклов значения и зашифровываются в режиме простой замены, образуя первый 64-разрядный блок шифрующей гаммы, состоящей из правого и левого полублоков. Полублоки шифруемой гаммы записываются в регистр последовательно сдвига, из которого побитно считаются для шифрования битов первого 64-разрядного блока открытого сообщения. Очередной бит блока сообщения шифруется в режиме гаммирования путем поразрядного сложения по модулю 2 в сумматоре СМ с очередным битом блока шифрующей гаммы:

Для шифрования второго и последующих блоков открытого сообщения из накопителей и считываются значения и, складываются с соответствующими криптографическими константами и полученные значения запоминаются в указанных накопителях. По каналу связи или в память ЭВМ последовательно передаются синхропосылки и сформированные блоки криптограммы. Криптосистема алгоритма при расшифровывании в режиме гаммирования имеет вид, аналогичный криптосистеме шифрования. Из полученной синхропосылки, идентично процессу формирования блоков шифрующей гаммы, последовательно формируются блоки дешифрующий гаммы, которые используются для дешифрирования принятых блоков. Алгоритм шифрования в режиме гаммирования является реализацией режима обратной связи по выходу блочного шифра и позволяет обеспечить помехоустойчивую шифрованную связь при передаче данных по каналам связи с ошибками, так как размножения ошибок при расшифровании не происходит. Пусть, X и Y случайные величины дискретного типа. X — случайная величина для открытого текста, Y — случайная величина для гаммы, тогда закон распределения X будет выглядеть так:

X 0 1

Pi p 1-p

Используем p и 1-p, так как вероятность встречаемости букв в разных словах различна. Закон распределения Y:

Y 0 1

Pi 1/2 1/2

То есть в качестве гаммы подаётся одинакового количество единиц и нулей (у Y симметричный закон распределения). Z — случайная величина дискретного типа для закрытого текста. Из картинки выше видно, что Z=X+Y(mod 2). Вычислим вероятности встречаемости нулей и единиц в законе распределения Z:

Используя:

1. P(A+B)=P(A)+P(B), если A и B не совместны.

2. P(A*B)=P(A)*P(B), если A и B независимы.

Имеем:

P(Z=0) = P(X=0,Y=0)+P(X=1,Y=1) = P(X=0)*P(Y=0)+P(X=1)*P(Y=1) =

p*1/2+(1-p)*1/2 = 1/2 (для любого p!)

P(Z=1) = 1-P(Z=0) = 1/2

То есть закон распределения Z:

Z 0 1

Pi 1/2 1/2

Таким образом, закон распределения Z оказывается симметричным, то есть получается та же гамма или шум (Z не содержит никакую информацию из X, то есть в Z нет p). Это доказывает, что шифр является абсолютно стойким. Пример работы метода в программе (см. рис. 8).

Рисунок 8. Пример шифрования текста с использованием алгоритмов гаммирования.

ВЫВОДЫ

В ходе выполнения курсовой работы были изучены алгоритмы и методы шифрования текстовой информации в Delphi такие как:

  • Метод Виженера;

  • Метод замены;

  • Метод Цезаря;

  • Метод перестановок;

  • Гаммирование.

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

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

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

Из недостатков разработанной программы можно выделить следующее:

Некоторые из методов (например, Метод Цезаря или Метод перестановок) не шифрует специальные символы, например «!@#$%^&», так же при шифровании старая информация содержащиеся в поле не очищается автоматически, для этой функции программа содержит кнопки «Очистка».

Возможно дальнейшее обновление.

ЛИТЕРАТУРА

  1. автор Основы криптозащиты АСУ. Под ред. Б. П. Козлова. М.: МО, 1996.

  2. Архангельский А.Я. Программирование в Delphi 7. – М.: «Бином», 2005. – 1154 с.

  3. Герасименко В. А. Защита информации в автоматизированных системах обработки данных., кн. 1, 2. М.: Энергоатомиздат, 1994.

  4. Григорьев, А.Б. О чем не пишут в книгах по Delphi; БХВ-Петербург, 2008. — 576 c.

  5. Дарахвелидзе, П.Г.; Марков, Е.П. Delphi 2005 для Win32 наиболее полное руководство; БХВ-Петербург, 2005. — 909 c.

  6. Жельников В. Кpиптогpафия от папиpуса до компьютеpа. — М.: ABF, 1996. — 335 с.

  7. Конхейм А. Г. Основы криптографии. М.: Радио и связь, 1987.

  8. Криптография. // Электронный ресурс. [Режим доступа]: http://ru.wikipedia.org/wiki/Криптография.

  9. Культин Н., Основы программирования в Delphi 7; СПб: БХВ, 2003. — 608 c.

  10. Мафтик С. Механизмы защиты в сетях ЭВМ. М.: Мир, 1993.

  11. Мельников В. В. Защита информации в компьютерных системах. М.: Финансы и статистика, 1997.

  12. Митчелл К. Керман. Программирование и отладка в Delphi. Учебный курс. – С.П.: Издательский дом «Вильямс», 2004. – 720 с.

  13. Сван Т., Секреты 32-разрядного программирования в Delphi; К.: Диалектика, 1997. — 480 c.

  14. Шумаков, П.В. Delphi 3 и разработка приложений баз данных; М.: Нолидж, 1998. — 704 c.

  15. Щербаков Л.Ю. Домашен А.В. — "Прикладная криптография", 1999. — 110 c.

36

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]