Защита информации в ПЭВМ. Шифр Плейфера

Загрузить архив:
Файл: ref-13173.zip (31kb [zip], Скачиваний: 91) скачать

Московский государственный Авиационный институт

(технический университет)

Кафедра 403

“алгоритмические языки и программирование”

Расчетно графическая работа

на тему

_                                                                                              _

                      Защита информации в ПЭВМ                     _

                                   Шифр Плэйфера                                _

студент гр. 04-109

Дмитрий Гуренков

Научный руководитель

Кошелькова Л.В.

Москва DATE @ "гггг" * MERGEFORMAT гггг год


Оглавление

TOC o "1-3" .............................................................................................................................. GOTOBUTTON _Toc487821074PAGEREF _Toc487821074 3

Криптографические методы защиты информации............................................................................................. GOTOBUTTON _Toc487821075PAGEREF _Toc487821075 4

Модель одноключевой криптосистемы для передачи сообщений........................................................................ GOTOBUTTON _Toc487821076PAGEREF _Toc487821076 5

Шифр простой подстановки.......................................................................................................................................... GOTOBUTTON _Toc487821077PAGEREF _Toc487821077 6

Шифр перестановки (транспозиции) с фиксированным d (блок d -группа символов).................................... GOTOBUTTON _Toc487821078PAGEREF _Toc487821078 6

Шифр Вижинера................................................................................................................................................................. GOTOBUTTON _Toc487821079PAGEREF _Toc487821079 6

Шифрование с помощью датчика случайных чисел (ПСЧ)..................................................................................... GOTOBUTTON _Toc487821080PAGEREF _Toc487821080 7

ШИФР ПЛЭЙФЕРА.............................................................................................................................................................. GOTOBUTTON _Toc487821081PAGEREF _Toc487821081 8

Блок схемы............................................................................................................................................................................. GOTOBUTTON _Toc487821082PAGEREF _Toc487821082 8

ПП SHIFR_PLEYFER........................................................................................................................................................... GOTOBUTTON _Toc487821083PAGEREF _Toc487821083 8

ПФ SHIFR_TXT..................................................................................................................................................................... GOTOBUTTON _Toc487821084PAGEREF _Toc487821084 9

ПФ DESHIFR_TXT............................................................................................................................................................. GOTOBUTTON _Toc487821085PAGEREF _Toc487821085 11

ОСНОВНАЯ ПРОГРАММА............................................................................................................................................. GOTOBUTTON _Toc487821086PAGEREF _Toc487821086 13

Программа............................................................................................................................................................................ GOTOBUTTON _Toc487821087PAGEREF _Toc487821087 14

Результаты............................................................................................................................................................................ GOTOBUTTON _Toc487821088PAGEREF _Toc487821088 18

СПИСОК   ЛИТЕРАТУРЫ.............................................................................................................................................. GOTOBUTTON _Toc487821089PAGEREF _Toc487821089 19


Защита информации в ПЭВМ

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

В связи с этим защита информации в процессе ее сбора, хранения и обработки приобретает исключительно важное значение (особенно в коммерческих и военных областях).

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

- проверка целостности информации;

-исключение несанкционированного доступа к ресурсам ПЭВМ и хранящимся в ней программам и данным (с целью сохранения трех основных свойств защищаемой информации: целостности, конфи­денциальности, готовности);

- исключение несанкционированного использования хранящихся в ПЭВМ программ (т.е. защита программ от копирования).

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

С первой группой, в которой основным средством является человек, связаны следующие основные возможные утечки:

- чтение информации с экрана посторонним лицом;

- расшифровка программой зашифрованной информации;

- хищение носителей информации (магнитных дисков, дискет, лент и т. д.).

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

- подключение к ПЭВМ специально разработанных аппаратных средств, обеспечивающих доступ к информации;

- использование специальных технических средств для перехвата

электромагнитных излучений технических средств ПЭВМ. В группе каналов, в которых основным средством является програм­ма, можно выделить следующие возможные каналы утечки:

- несанкционированный доступ программы к информации;

- расшифровка программой зашифрованной информации;

- копирование программой информации с носителей.

Будем рассматривать средства защиты, обеспечивающие закрытие возможных каналов утечки, в которых основным средством является программа. Заметим, что такие средства в ряде случаев позволяют доста­точно надежно закрыть некоторые возможные каналы утечки из других групп. Так, криптографические средства позволяют надежно закрыть канал, связанный с хищением носителей информации.

Обзор методов защиты информации

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

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

1- средства собственной защиты;

2- средства защиты в составе вычислительной системы;

3- средства защиты с запросом информации;

4- средства активной защиты;

5- средства пассивной защиты.

Классификация средств защиты информации

Средства защиты информации


Собственной защиты

В составе ВС

С запросом информации

Актив

ные

Пассивные

- документация

- машинный код

- сопровождение

- авторское право

- заказное проектирование

- защита магнитных дисков

- специальная аппаратура

- замки защиты

- изменения функций

- пароли

- шифры

- сигнатура

- аппаратура защиты (ПЗУ, преобразователи) генератор случайных чисел

- замки защиты

(время, данные)

- искаженные программы

(программы

вирусы, искажение функций)

- сигнал тревоги

- запуск по ключам

- авторская эстетика

- идентификация программ

- частотный анализ

- корреляционный анализ

- «родимые пятна»

- устройство контроля

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

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

1. Основные определения

Криптология (от греческих корней: cryptos-тайный и logos-слово) как научная дисциплина оформилась в 1949 г. с появлением работы Шеннона, в которой устанавливалась связь криптологии с теорией информации. Криптология включает два направления: криптографию и криптоанализ. Задача криптографа - обеспечить как можно большие секретность и аутентичность (подлинность) передаваемой информации. Криптоаналитик, напротив, "взламывает " систему защиты, пытаясь раскрыть зашифрован­ный текст или выдать поддельное сообщение за настоящее.

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

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

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

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

Процесс передачи сообщений использует 2 алгоритма: шифрования E-Encipherment и дешифрования D-Decipherment, в которых для преобра­зования используется ключ К.

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

Имитовставка - это последовательность данных фиксированной длины, полученная по определенному правилу из открытых данных и ключа, которая используется для защиты от навязывания ложных данных.

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

Криптосистемы с закрытым ключом (одноключевые)

Модель одноключевой криптосистемы для передачи сообщений

Источник сообщения

                                                                                                     санкционированный получатель

приемник сообщений

Дешифратор

D

Шифратор

Е

                                      Х                                            У = Ек(Х)                                       Х= Dк(У)

                            исходный

                                текст                     R          К                                                      К

Рандомизатор

Источник

ключа

                                                                                                                                                              защищенный

                                                                                                                                                              канал связи для                передачи ключа.

Источник сообщения передает "открытый текст" X, а рандомизатор формирует рандомизируюшую последовательность R. Задача рандомизатора состоит в том, чтобы выровнять частоты появления символов источ­ника сообщения путем перехода к алфавиту большего объема. Источник ключа генерирует некоторый ключ К, а шифратор преобразует открытый текст Х в шифротекст (криптограмму), который является некоторой функцией X, а конкретный вид криптограммы определяется секретным ключом и рандомизирующей последовательностью.

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

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

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

Шифр простой подстановки.

Это простейший метод шифрования, его называют также моноалфа­витной подстановкой. Ключом является переставленный алфавит, буквами которого заменяют буквы нормального алфавита. Например, каждая буква заменяется на букву, стоящую на 3 позиции впереди: A®D, B®E и т.д. Тогда текст АВС заменяется на DEF. Все моноалфавитные подстановки можно представить в виде:

Y, =ахi + b( mod g),

а - некоторый постоянный десятичный коэффициент;

b - коэффициент сдвига;

g - длина используемого алфавита;

хi -i-й символ открытого текста (номер буквы в алфавите). Основным недостатком рассмотренного метода является то, что статистические свойства открытого текста (частоты повторения букв) сохраняются и в шифротексте.

Шифр перестановки (транспозиции) с фиксированным d (блок d -группа символов).

Это блочный метод. Текст делят на блоки и в каждом производится перестановка символов открытого текста. Правило перестановки задается секретным ключом. Пусть перестановка задается таблицей:

123456

316524

Тогда открытый текст преобразуется в закодированный так: первый символ становится вторым, второй - пятым и так далее

MICROC

OMPUTE

R - открытый текст

CMCOIR

POETMU

R - закодированный текст

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

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

Шифр, задаваемый формулой

уi = хi + ki(modg),

где ki - i-я буква ключа, в качестве которого используется слово или фраза, называется шифром Вижинера. Воспользуемся таблицей кодирования букв русского алфавита:

Буква

А

Б

В

Г

Д

Е

Ж

3

И

И

К

Л

Код

01

02

03

04

05

06

07

08

09

10

11

12

Буква

М

Н

О

П

Р

С

Т

У

Ф

X

Ц

Ч

Код

13

14

15

16

17

18

19

20

21

22

23

24

Буква

Ш

Щ

Ъ

Ы

Ь

Э

Ю

Я

(пробел)

Код

25

26

27

28

29

30

31

32

33

Пусть имеется открытый текст "ЗАМЕНА" и подстановка шифра Вижинера задана таблицей:

3

А

М

Е

Н

А

К

Л

Ю

Ч

К

Л

По формуле шифра Вижинера находим:

Y1=8   +   ll   (mod33)   =19ÞT;

Y2=l    +   12(mod33)   =13ÞM;

Y3=13+   31(mod 33)=11ÞК;

Y4=6   +   24(mod 33)=30ÞЮ;

Y5=14+   11(mod 33)=25ÞШ;

Y6 =1   +   12(mod 33)=13ÞМ.

Шифротекст: "ТМКЭШМ".

Шифры Бофора используют формулы:

              yi = ki - xi(mod g) и

              yi = Xi - ki(mod g).

Гомофоническая замена одному символу открытого текста ставит в соответствие несколько символов шифротекста. Этот метод применяется для искажения статистических свойств текста.

Шифрование с помощью датчика случайных чисел (ПСЧ)

Это довольно распространенный криптографический метод, прин­цип которого заключается в генерации гаммы шифра с помощью датчика ПСЧ и наложении полученной гаммы на открытые данные обратимым образом (например, при использовании логической операции "исключающее ПЛИ").

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

На основе теории групп разработано несколько типов датчиков ПСЧ. Наиболее доступны и эффективны конгруэнтные генераторы ПСЧ. Напри­мер, линейный конгруэнтный датчик ПСЧ вырабатывает последовательно­сти псевдослучайных чисел T(i), описываемые соотношением

T(i+l) = [AT(i) + C]mod M,

Где А и С - константы; Т(0) - исходная величина, выбранная в качестве порождающего числа.

Такой датчик ПСЧ генерирует псевдослучайные числа с определен­ным периодом повторения, зависящим от выбранных значений А и С. Значение М обычно устанавливается равным 25, где b - длинна слова ЭВМ в битах.

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


ШИФР ПЛЭЙФЕРА

Блок схемы

ПП SHIFR_PLEYFER

ПП SHIFR_PLEYFER для определения координат символов матрицы Плэйфера.


SHIFR_PLEYFER(Alfavit, INDEX)


Список формальных параметров:

                Alfavit, INDEX

Входные параметры:

                INDEX                  - матрица символов Плэйфера, величина символьная.

Выходные параметры:

                Alfavit                   - хранит координаты символов матрицы Плэйфера, величины целого типа.

Алгоритм


                                                               Начало ПП SHIFR_PLEYFER                      (Alfavit, INDEX)


Описание массивов: Alfavit[255], INDEX[6, 6]


I = 1


                                                                              нет


J = 1


                                                               нет


Alfavit[Ord(INDEX[I, J])].Stolb = J


J = J + 1


                                                                                                              Конец ПП SHIFR_PLEYFER

Обозначения

1.                            Описание массивов Alfavit, INDEX

2 .. 5, 7, 8              Организация цикла заполнения массива Alfavit типа запись

6.                            Определение строк и столбов для символов матрицы INDEX


ПФ SHIFR_TXT

ПФ SHIFR_TXT производит шифрование строки открытого текста.


SHIFR_TXT(Str, Alfavit, INDEX)

Список формальных параметров:

                Str, Alfavit, INDEX

Входные параметры:

                Str                          - строка открытого текста, величина строка.

                Alfavit                   - хранит координаты символов матрицы Плэйфера, величины целого типа.

                INDEX                  - матрица символов Плэйфера, величина символьная.

Выходные параметры:

                SHIFR_TXT        - принимает значение зашифрованной строки, величины строка.

Обозначения

1.Описание массивов Alfavit, INDEX.

2 .. 7       В открытом тексте вставляется “-”между одинаковыми символами.

8 .. 9       Добавление “-” в конец открытого текста, в случае нечет. кол-ва символов в строке .

10 .. 13Организация по парного перебора символов строки открытого текста.

14 .. 15Пара символов находится в одной строке матрицы алфавита Плэйфкра.

16 .. 17Пара символов находится в одном столбце матрицы алфавита Плэйфера.

18.          Пара символов находится в разных строках и столбцах матрицы алфавита Плэйфера.

19.          Присваивание ПФ SHIFR_TXT значения новой строки

Продолжение следует¼

Алгоритм

                                                               Начало ПФ SHIFR_TXT                       (Str, Alfavit, INDEX)


Описание массивов: Alfavit[255], INDEX[6, 6]


New = “,   Dlina_str = Length(Str),   I = 1


                                                                                                              нет

I <= Dlina_str


да                                                                           нет

Str[I] = Str[I + 1]


New = ( New + Str[I] + ‘-’ )                                                   New = ( New + Str[I] )


I = I + 1


нет                                                                        

Odd(Length(Str)) = TRUE


New = New + ‘-’


Str = “,   Dlina_new = Length(New)div 2,   I = 1


                                                                                                              нет

I <= Dlina_new


                                               SIM1 = New[2*I - 1], SIM2 = New[2*I]                               SHIFR_TXT = Str


                                                                              I = I + 1                                  Конец ПФ SHIFR_TXT


                                                                                                                                                             нет

ALFAVIT[Ord(SIM1)].STROK = ALFAVIT[Ord(SIM2)].STROK


Str = Str + INDEX[(ALFAVIT[Ord(SIM1)].STROK), ((ALFAVIT[Ord(SIM1)].STOLB mod 6) + 1)]

+ INDEX[(ALFAVIT[Ord(SIM2)].STROK), ((ALFAVIT[Ord(SIM2)].STOLB mod 6) + 1)]


                                                                                                                                                             нет

ALFAVIT[Ord(SIM1)].STOLB = ALFAVIT[Ord(SIM2)].STOLB


Str = Str + INDEX[((ALFAVIT[Ord(SIM1)].STROK mod 6) + 1), (ALFAVIT[Ord(SIM1)].STOLB)]

+ INDEX[((ALFAVIT[Ord(SIM2)].STROK mod 6) + 1), (ALFAVIT[Ord(SIM2)].STOLB)]

Str = Str + INDEX[(ALFAVIT[Ord(SIM2)].STROK), (ALFAVIT[Ord(SIM1)].STOLB)]

+ INDEX[(ALFAVIT[Ord(SIM1)].STROK), (ALFAVIT[Ord(SIM2)].STOLB)]


ПФ DESHIFR_TXT

ПФ DESHIFR_TXT производит расшифрацию строки открытого текста.


DESHIFR_TXT(Str, Alfavit, INDEX)

Список формальных параметров:

                Str, Alfavit, INDEX

Входные параметры:

                Str                          - строка открытого текста, величина строка.

                Alfavit                   - хранит координаты символов матрицы Плэйфера, величины целого типа.

                INDEX                  - матрица символов Плэйфера, величина символьная.

Выходные параметры:

                DESHIFR_TXT- принимает значение расшифрованной строки, величины строка.

Обозначения

1.Описание массивов Alfavit, INDEX.

2 .. 5       Организация по парного перебора символов строки открытого текста.

6 .. 7       Пара символов находится в одной строке матрицы алфавита Плэйфкра.

8 .. 9       Пара символов находится в одном столбце матрицы алфавита Плэйфера.

10.          Пара символов находится в разных строках и столбцах матрицы алфавита Плэйфера.

11 .. 15Из расшифрованной строки создается новая строка без спец. знак “-”.

16.          Присваивание ПФ DESHIFR_TXT значения новой строки

Продолжение следует¼

Алгоритм

                                                               Начало ПФ DESHIFR_TXT                                  (Str, Alfavit, INDEX)


Описание массивов: Alfavit[255], INDEX[6, 6]


New = “,   Dlina_str = Length(Str)div 2,   I = 1


                                                                                                                                                             нет

I <= Dlina_str


SIM1 = Str[2*I - 1], SIM2 = Str[2*I]

                                              


I = I + 1


                                                                                                                                                             нет

ALFAVIT[Ord(SIM1)].STROK = ALFAVIT[Ord(SIM2)].STROK


New = New + INDEX[(ALFAVIT[Ord(SIM1)].STROK), (((ALFAVIT[Ord(SIM1)].STOLB + 4)mod 6) + 1)]

+ INDEX[(ALFAVIT[Ord(SIM2)].STROK), (((ALFAVIT[Ord(SIM2)].STOLB + 4)mod 6) + 1)]


                                                                                                                                                             нет

ALFAVIT[Ord(SIM1)].STOLB = ALFAVIT[Ord(SIM2)].STOLB


New = New + INDEX[(((ALFAVIT[Ord(SIM1)].STROK + 4)mod 6) + 1), (ALFAVIT[Ord(SIM1)].STOLB)]

+ INDEX[(((ALFAVIT[Ord(SIM2)].STROK + 4)mod 6) + 1), (ALFAVIT[Ord(SIM2)].STOLB)]


New = New + INDEX[(ALFAVIT[Ord(SIM2)].STROK), (ALFAVIT[Ord(SIM1)].STOLB)]

+ INDEX[(ALFAVIT[Ord(SIM1)].STROK), (ALFAVIT[Ord(SIM2)].STOLB)]


Str = “,   Dlina_new = Length(New),   I = 1


                                                                              нет

I <= Dlina_new


нет                                                        

New[I] ¹ ‘-’


Str = Str + New[I]


I = I + 1


DESHIFR_TXT = Str


Конец ПФ DESHIFR_TXT


ОСНОВНАЯ ПРОГРАММА

Алгоритм


Начало основного блока программы


Описание массивов: Alfavit[255], INDEX[6, 6]


Вывод: “Выберите (S)ШИФРОВАТЬ или (D)ДЕШИФРОВАТЬ”


нет                                                         Ввод: K                                                                 


нет                                                        

UpCase(K) = ‘S’                        UpCase(K) = ‘D’                                                


Вывод: “Путь к файлу: ”


Ввод: Name1


Assign (Var_file1, Name1)

Reset (Var_file1)


нет                                                                        

IOResult = 0


Вывод: “Сохранить как: ”


Ввод: Name2


нет                                                                        

Length(Name2) ¹ 0


Assign (Var_file2, Name2)

ReWrite (Var_file2)


SHIFR_PLEYFER(ALFAVIT, INDEX)


                                                                                                                                             нет

NOT EOF(Var_file1)


Ввод из файла Var_file1: Str


нет                                                                         да

UpCase(K) = ‘S’


Str = DESHIFR_TXT(Str, ALFAVIT, INDEX)                      Str = SHIFR_TXT(Str, ALFAVIT, INDEX)


Вывод в файл Var_file2: Str


Close (Var_file1)

Close (Var_file2)


Конец основного блока программы

Обозначения

1.             Описание массивов Alfavit, INDEX.

2 .. 5        Выбор шифрование или расшифрация файла.

6 .. 9        Определение файла ввода данных.

10 .. 13    Определение файла вывода полученных результатов.

14.           Обращение к ПП SHIFR_PLEYFER(ALFAVIT, INDEX).

15 .. 16    Перебор строк из файла Var_file1.

17.           Выбор действий шифрование либо расшифрация строки .

18.           Обращение к ПФ DESHIFR_TXT(Str, ALFAVIT, INDEX).

19.           Обращение к ПФ SHIFR_TXT(Str, ALFAVIT, INDEX).

20.           Вывод результата в файл Var_file2.

21.           Закрытие файлов ввода и вывода.


Программа

PROGRAM SHIFR_PLEYFERA;

USES Crt;

TYPE

                path = STRING[14];

                Stroca = STRING[255];

                Simvol = array [1..6, 1..6] of CHAR;

                MATR = array [1..255] of RECORD

                     STROK, STOLB: Byte;

                END;

CONSTINDEX: Simvol = (('А', 'Ж', 'Б', 'М', 'Ц', 'В'),                      {типизированные константы для матрицы Плэйфера}

                                               ('Ч', 'Г', 'Н', 'Ш', 'Д', 'О'),

                                               ('Е', 'Щ', ' , ', 'Х', 'У', 'П'),

                                               (' . ', 'З', 'Ъ', 'Р', 'И', 'Й'),

                                               ('С', 'Ь', 'К', 'Э', 'Т', 'Л'),

                                               ('Ю', 'Я', '', 'Ы', 'Ф', '-'));

VAR

                Var_file1 ,Var_file2: Text;

                Name1, Name2: path;

                ALFAVIT: MATR;

                Str: Stroca;

                K: Char;

{Определение координат символов матрицы Плэйфера}

PROCEDURE SHIFR_PLEYFER(Var ALFAVIT: MATR; INDEX: Simvol);

     VARI, J: Byte;                                                                                              {I, J - счетчики циклов}

     BEGIN                                                                                            {Начало основного блока ПП SHIFR_PLEYFER}

                FOR I:= 1 TO 6 DO for J:= 1 to 6 do

                WITH ALFAVIT[Ord(INDEX[I, J])] DO

                     begin

                               STROK:= I;                                                           {строка символа}

                               STOLB:= J;                                                           {столбец символа}

                     end;

     END;                                                                                               {Конец основного блока ПП SHIFR_PLEYFER}


{Производится шифрование строки открытого текста}

FUNCTION SHIFR_TXT(Str: Stroca; Alfavit: MATR; INDEX: Simvol): Stroca;

     VAR                                                                                                {Объявление переменных}

                SIM1, SIM2: Char;

                New: STRING;

                I, Dlina_str, Dlina_new: Byte;                                                              {I - счетчик цикла}

     BEGIN                                                                                            {Начало основного блока ПФ SHIFR_TXT}

                {В открытом тексте вставляется спец. знак “-” между одинаковыми символами}

                New:= '';

                Dlina_str:= Length(Str);

                FOR I:= 1 TO Dlina_str DO IF (Str[I] = Str[I+1]) THEN New:= (New + Str[I] + '-') ELSE New:= (New + Str[I]);

                {Добавление спец. знака “-” в конец открытого текста в случае нечетного количества символов в строке }

                IF Odd(Length(Str)) = TRUE THEN New:= New + '-';

                {Шифрование открытого текста по матрице алфавита Плэйфера}

                Str:= '';

                Dlina_new:= Length(New)div 2;

                FOR I:= 1 TO Dlina_new DO

                     begin

                               SIM1:= New[2*I - 1];

                               SIM2:= New[2*I];

                               IF (ALFAVIT[Ord(SIM1)].STROK = ALFAVIT[Ord(SIM2)].STROK) THEN

                               {Пара символов находятся в одной строке матрицы}

                                         Str:= Str + INDEX[(ALFAVIT[Ord(SIM1)].STROK), ((ALFAVIT[Ord(SIM1)].STOLB mod 6) + 1)]

                                               + INDEX[(ALFAVIT[Ord(SIM2)].STROK), ((ALFAVIT[Ord(SIM2)].STOLB mod 6) + 1)]

                               ELSE

                                               IF (ALFAVIT[Ord(SIM1)].STOLB = ALFAVIT[Ord(SIM2)].STOLB) THEN

                                               {Пара символов находятся в одном столбце матрицы}

                                                         Str:= Str + INDEX[((ALFAVIT[Ord(SIM1)].STROK mod 6) + 1), (ALFAVIT[Ord(SIM1)].STOLB)]

                                                               + INDEX[((ALFAVIT[Ord(SIM2)].STROK mod 6) + 1), (ALFAVIT[Ord(SIM2)].STOLB)]

                                               ELSE

                                               {Пара символов находятся в разных строках и столбцах матрицы}

                                                        Str:= Str + INDEX[(ALFAVIT[Ord(SIM2)].STROK), (ALFAVIT[Ord(SIM1)].STOLB)]

                                                               + INDEX[(ALFAVIT[Ord(SIM1)].STROK), (ALFAVIT[Ord(SIM2)].STOLB)];

                     end;

                SHIFR_TXT:= Str;

     END;                                                                                                               {Конец основного блока ПФ SHIFR_TXT}


{Производится расшифрация строки }

FUNCTION DESHIFR_TXT(Str: Stroca; Alfavit: MATR; INDEX: Simvol): Stroca;

     VAR                                                                                                {Объявление переменных}

                SIM1, SIM2: Char;

                NEW: STRING;

                I, Dlina_str, Dlina_new: Byte;                                                              {I - счетчик цикла}

     BEGIN                                                                                            {Начало основного блока ПФ DESHIFR_TXT}

                {Дешифрование открытого текста по матрице алфавита Плэйфера}

                New:= '';

                Dlina_str:= Length(Str)div 2;

                FOR I:= 1 TO Dlina_str DO

                     begin

                               SIM1:= Str[2*I - 1];

                               SIM2:= Str[2*I];

                               IF (ALFAVIT[Ord(SIM1)].STROK = ALFAVIT[Ord(SIM2)].STROK) THEN

                               {Пара символов находятся в одной строке матрицы}

                                        New:= New + INDEX[(ALFAVIT[Ord(SIM1)].STROK), (((ALFAVIT[Ord(SIM1)].STOLB + 4) mod 6) + 1)]

                                               + INDEX[(ALFAVIT[Ord(SIM2)].STROK), (((ALFAVIT[Ord(SIM2)].STOLB + 4) mod 6) + 1)]

                               ELSE

                                               IF (ALFAVIT[Ord(SIM1)].STOLB = ALFAVIT[Ord(SIM2)].STOLB) THEN

                                               {Пара символов находятся в одном столбце матрицы}

                                                  New:= New + INDEX[(((ALFAVIT[Ord(SIM1)].STROK + 4) mod 6) + 1), (ALFAVIT[Ord(SIM1)].STOLB)]

                                                     + INDEX[(((ALFAVIT[Ord(SIM2)].STROK + 4) mod 6) + 1), (ALFAVIT[Ord(SIM2)].STOLB)]

                                               ELSE

                                               {Пара символов находятся в разных строках и столбцах матрицы}

                                                  New:= New + INDEX[(ALFAVIT[Ord(SIM2)].STROK), (ALFAVIT[Ord(SIM1)].STOLB)]

                                                               + INDEX[(ALFAVIT[Ord(SIM1)].STROK), (ALFAVIT[Ord(SIM2)].STOLB)];

                     end;

                {В открытом тексте убирается спец. знак “-”}

                Str:= '';

                Dlina_new:= Length(New);

                FOR I:= 1 TO Dlina_new DO IF (New[I] <> '-') THEN Str:= (Str + New[I]);

                DESHIFR_TXT:= Str;

   END;                                                                                                 {Конец основного блока ПФ DESHIFR_TXT}


{Начало основного блока программы}

BEGIN

                ClrScr;

                {Выбор шифрование или дешифрование файла}

                WriteLn ('Выбери: (S)ШИФРОВАТЬ или (D)ДЕШИФРОВАТЬ ?');

                REPEAT

                     K:= ReadKey;

                UNTIL (UpCase(K) = 'S') OR (UpCase(K) = 'D');

                {Определение файла ввода}

                {$I-}

                REPEAT

                     Write ('Путь к файлу: ');

                     ReadLn (Name1);

                     Assign (Var_file1, Name1);

                     Reset (Var_file1);

                UNTIL (IOResult = 0);

                {$I+}

                {Определение файла вывода}

                REPEAT

                      Write ('Сохранить как: ');

                      ReadLn (Name2);

                UNTIL (Length(Name2) <> 0);

                   Assign (Var_file2, Name2);

                   Rewrite(Var_file2);

                {Обращение к ПП SHIFR_PLEYFER}

                SHIFR_PLEYFER(ALFAVIT, INDEX);

                {Цикл перебора строк открытого текста}

                WHILE NOT EOF(Var_file1) DO

                     begin

                               ReadLn (Var_file1, Str);

                               {Обращение к ПФ SHIFR_TXT либо ПФ DESHIFR_TXT}

                               IF UpCase(K) = 'S' THEN Str:= SHIFR_TXT(Str, Alfavit, INDEX) ELSE Str:= DESHIFR_TXT(Str, Alfavit, INDEX);

                               WriteLn (Var_file2, Str);

                     end;

                Close (Var_file2);                                                                 {Закрытие файла Name2}

                Close (Var_file1);                                                                 {Закрытие файла Name1}

END.                                                                                                    {Конец основного блока программы}


Результаты

{test.txt} - исходный открытый текст.

ШИФР ПЛЭЙФЕРА

МАЛЬЧИК НА КУХНЕ УКСУС НАШЕЛ.

С ЧАЙНОЙ ЧАШКОЙ К ДЕДУ ПРИШЕЛ.

ДЕДУШКА, МИЛЕНЬКИЙ, СДЕЛАЙ ГЛОТОК...

СТАРЕНЬКИЙ ДЕДУШКА НА ПОЛ ПОТЕК.

{test.plf} - зашифрованный файл (test.txt)

РДИЫ,-СТ-И.ХЮВ

БЫСВГСТЪБ,ЮБ,ТШ,Ю,Т,ЕТЮКБЧХЧЙС

КЮНЮ.ВШЧ-ЪЕЧЭНПЛБ НФЧУФ,ЙХДРСПЮЙ

НФЧУДХБСЪБРЦПСКГЪТПЪКЮУЧВС-ЪЬОЛДЛНЮЙЮЙЮЙ

КЮЦСХ.КГЪТ-ЪУЧУИЭНЮББЧ,-П-,-ЛДС,ЮЙ

{test.new} - расшифрованный файл (test.plf)

ШИФР ПЛЭЙФЕРА

МАЛЬЧИК НА КУХНЕ УКСУС НАШЕЛ.

С ЧАЙНОЙ ЧАШКОЙ К ДЕДУ ПРИШЕЛ.

ДЕДУШКА, МИЛЕНЬКИЙ, СДЕЛАЙ ГЛОТОК...

СТАРЕНЬКИЙ ДЕДУШКА НА ПОЛ ПОТЕК.


СПИСОК   ЛИТЕРАТУРЫ

1.Защита информации в персональных ЭВМ/ А.В.Спесивцев, В.А.Вегнер, А.Ю.Крутяков и др. - М.: Радио и связь, МП 'Веста',1993.

2.3ащита программного обеспечения: Перевод с английского./ Под редакцией Д.Гроувера. - М.: Мир 1992.

3.Рощин Б.В.Элементы криптозащиты информации: Учебное пособие. - М.: Издательство МАИ, 1995.

4.А.В.Петраков. Защита и охрана личности, собственности, информации: Справное пособие. - М.: Радио и связь, 1997.