Разработка программы шифрования текста

  • Вид работы:
    Дипломная (ВКР)
  • Предмет:
    Информационное обеспечение, программирование
  • Язык:
    Русский
    ,
    Формат файла:
    MS Word
    572,28 kb
  • Опубликовано:
    2011-12-26
Вы можете узнать стоимость помощи в написании студенческой работы.
Помощь в написании работы, которую точно примут!

Разработка программы шифрования текста

СОДЕРЖАНИЕ

Введение

.        ОБЩАЯ ХАРАКТЕРИСТИКА РАБОТЫ

.1      Актуальность темы

.2      Цель работы

.3      Задачи работы

.        ОСНОВНОЕ СОДЕРЖАНИЕ

.1      Описание работы программы

.1.1   Этапы работы программы

.1.2   Подробнее о программе. Использованные функции и процедуры

.1.3   Работа основных функций в программе

.1.4   Блок-схемы

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

.1.6   Скриншоты

.        ОСНОВЫЕ РЕЗУЛЬТАТЫ РАБОТЫ

СПИСОК ИСПОЛЬЗОВАННЫХ

ВВЕДЕНИЕ

шифрование текст сообщение

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

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

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

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

Основные термины и определения

Алфавит - законченное множество используемых для кодирования информации символов.

Текст - упорядоченный последовательность из символов алфавита.

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

Рисунок 1 - Шифрование и дешифрование

Ниже представлены методы шифрования, использованные мною в данной работе, а также их характеристики. [1]

Атбаш

Атба́ш (ивр. àúá"ùý) - простой шифр подстановки для иврита.

Правило шифрования

Состоит в замене i-й буквы алфавита буквой с номером n − i + 1, где n - число букв в алфавите.

Пример для латинского алфавита выглядит так:

Исходный текст: abcdefghijklmnopqrstuvwxyz

Зашифрованный текст: ZYXWVUTSRQPONMLKJIHGFEDCBA

История

Происхождение слова «атбаш» объясняется принципом замены букв. Слово àúáù составлено из букв «алеф», «тав», «бет» и «шин», то есть первой и последней, второй и предпоследней букв еврейского алфавита.

Шифр Атбаш был изобретен Ессеями - иудейской сектой повстанцев. Они разработали множество различных кодов и шифров, которые использовались для сокрытия важных имен и названий, чтобы потом избежать преследования. Знания этих кодов и шифров были потом переданы Гностикам, которые, в свою очередь, передали их Катарам. Позже Орден Тамплиеров завербовал Катарских дворян и перенял знания шифров. Таким образом, шифр был использован на протяжении многих лет, от около 500 до н.э. до 1300 г. н.э. - момента, когда Орден Тамплиеров был распущен. [2]

Метод Цезаря

Шифр Цезаря (шифр сдвига) - один из самых простых и наиболее широко известных методов шифрования.

Правило шифрования

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

Пример для латинского алфавита выглядит так:

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

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

История и применение

Согласно «Жизни двенадцати цезарей» Светония, в I в до н. э. Гай Юлий Цезарь во время войны с галлами, переписываясь со своими генералами в Риме, заменял в сообщении первую букву латинского алфавита (А) на четвертую (D), вторую (В) - на пятую (Е), наконец, последнюю - на третью. Цезарь использовал сдвиг на три позиции. [3]

Квадрат Полибия

Квадрат Полибия (англ. Polybius square), также известный как шахматная доска Полибия - оригинальный код простой замены.

Правило шифрования

Применительно к современному латинскому алфавиту из 26 букв шифрование по этому квадрату заключалось в следующем. В квадрат размером 5x6 клеток выписываются все буквы алфавита, при этом буквы I,J не различаются (J отождествляется с буквой I). Шифруемая буква заменялась на координаты квадрата, в котором она записана. Так, B заменялась на AB, F на BA, R на DB и т.д. При расшифровании каждая такая пара определяла соответствующую букву сообщения. Ключом такого шифра являлось расположение букв в таблице к примеру 5x5. Начальное расположение букв должно определяться ключом. В современном латинском алфавите 26 букв, следовательно таблица должна состоять из 5 строк и 5 столбцов, так как 25=5*5 наиболее близкое к 26 число. Но так как английский алфавит всё же содержит 26 букв, мной будет разработана программа из 6 строк и 6 столбцов, содержащая все символы латинского алфавита.

Пример для латинского алфавита выглядит так:

Исходный текст: abcdefghijklmnopqrstuvwxyz

Зашифрованный текст:

DCDDDEDFDGDHEAEBECEDEEEFEGEHFAFBFCDGFEFFFGFHGAGBGCGD

История и применение

Данный вид кодирования изначально применялся для греческого алфавита, но затем был распространен на другие языки. Квадрат Полибия - одна из древнейших систем кодирования, был разработан Полибием (греческий историк, полководец, государственный деятель, III век до н. э.). [4]

Шифр Гронсфельда

Шифр Гронсфельда - многоалфавитный шифр сложной замены.

Правило шифрования.

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

Пусть нам надо зашифровать слово EXALTATION. Например, берём в качестве ключа число 31415, затем составляем следующую таблицу:

Рисунок 2- Таблица Гронсфельда с ключом

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

Рисунок 3- Таблица Гронсфельда. Смещение символа алфавита

То есть букве E соответствует буква H. Таким образом, для всего слова получаем зашифрованный текст: HYEMYDUMPS. Обратное преобразование происходит подобным образом, только каждый раз сдвигаем алфавит в другую сторону.

Исходный текст: EXALTATION

Ключ: 31415

История и применение

Идея использования лозунга (гаммы) без изображения указанных выше таблиц была предложена в 1734 году бельгийцем Хосе де Бронкхором и начальником первого дешифровального отделения в Германии, военным и дипломатом граф ом Гронсфельдом. [5]

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

Шифр Виженера (фр. Chiffre de Vigenère) - метод полиалфавитного шифрования буквенного текста с использованием ключевого слова. Является простой формой многоалфавитной замены

Правило шифрования

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

Рисунок 4- Таблица Виженера ( tabula recta)

Например, предположим, что исходный текст имеет вид:

Человек, посылающий сообщение, записывает ключевое слово («LEMON») циклически до тех пор, пока его длина не будет соответствовать длине исходного текста: LEMONLEMONLE

Первый символ исходного текста A зашифрован последовательностью L, которая является первым символом ключа. Первый символ L шифрованного текста находится на пересечении строки L и столбца A в таблице Виженера. Точно так же для второго символа исходного текста используется второй символ ключа; то есть второй символ шифрованного текста X получается на пересечении строки E и столбца T. Остальная часть исходного текста шифруется подобным способом.

Исходный текст: ATTACKATDAWN

Зашифрованный текст: LXFOPVEFRNHR

Ключ: LEMONLEMONLE

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

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

Рисунок 5- Формула для шифрония методом Виженера

Рисунок 6- Формула для дешифрония методом Виженера

История и применение

Первое точное документированное описание многоалфавитного шифра было сформулированно Леоном Баттиста Альберти в 1467 году, для переключения между алфавитами использовался металлический шифровальный диск. Система Альберти переключает алфавиты после нескольких зашифрованных слов. Позднее, в 1518 году, Иоганн Трисемус в своей работе «Полиграфия» изобрел tabula recta - центральный компонент шифра Виженера.

То, что сейчас известно под шифром Виженера, впервые описал Джованни Батиста Беллазо в своей книге La cifra del. Sig. Giovan Battista Bellasо. Он использовал идею tabula recta Трисемуса, но добавил ключ для переключения алфавитов шифра через каждую букву. [6]

1.      ОБЩАЯ ХАРАКТЕРИСТИКА РАБОТЫ

1.1    Актуальность темы

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

1.2    Цель работы

Целью данной работы являются:

.        Углубление знаний и расширение навыков по разработке алгоритмов и их реализации на персональном компьютере.

.        Создание программы, способной зашифровывать и расшифровывать вводимый текст пятью способами:

Ø  Методом Атбаш

Ø  Шифром Цезаря

Ø  Квадратом Полибия

Ø  Методом Гронсфельда

Ø  Методом Виженера

1.3    Задачи работы

Задачами данной работы являются:

.        Изложение материала по теме «шифрование и дешифрование текста пятью разными методами»

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

.        Описание программы

.        Составление блок-схемы, характеризующей работу программы

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

2.      ОСНОВНОЕ СОДЕРЖАНИЕ

.1 Описание работы программы.

Программа разработана на языке программирования Pascal и состоит главным образом из девяти функций:

function Atbash (…)CaesarEncipher (…)CaesarDecipher (…)PolibiusEncipher (…)PolibiusDecipher (…)GronsfeldEncipher (…)GronsfeldDecipher (…)ViginerEncipher (…)ViginerDecipher (…)

Функция ( Function(…) ) - это часть программы, которая вычисляет и возвращает значение.

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

Программа устроена так, что выбрать определённый метод можно при помощи условного оператора.

Условный оператор (if) реализует выполнение определённых команд при условии, что некоторое логическое выражение (условие) принимает значение «истина» true.

Часть программы, включающую оператор if , с помощью которого программа обращается к нужной функции, передаёт ей значение и возвращает после вычисления, представлена ниже в пункте №7.

2.1.1 Этапы работы программы

.        При запуске программы процедура writeln выводит на экран сообщение 'Введите номер интересующего метода шифрования:1-Атбаш,2-Цезарь,3-Полибий,4-Гронсфельд,5-Виженер';

.        Процедура read считывает переменную m:real (тип данных- вещественные числа);

.        Процедура writeln выводит на экран сообщение 'Введите слово';

.        Процедура readln считывает переменную word:string (буквенного типа);

.        Процедура writeln выводит на экран сообщение '1-зашифровать/2-расшифровать ';

.        Процедура readln считывает переменную k:real (тип данных-вещественные числа);

.        Все переменные считаны - реализуется условный оператор:

если m=1, то проверяется k:

если к=1, то переменной s возвращается значение, полученное функцией от переменной word s := Atbash(word), и оператор writeln выводит ('Шифрование элемента ',s);

если к<>1,то переменной s возвращается значение, полученное функцией от переменной word s := Atbash(word), и оператор writeln выводит ('Расшифровывание элемента ', s);

Далее по аналогии:

m=2, k=1 -           s := CaesarEncipher(word);

writeln('Шифрование элемента ',s)

k<>1 -        s := CaesarDecipher(word);('Расшифровывание элемента ',s);=3, k=1 -           s := PolibiusEncipher(word);('Шифрование элемента ',s)

k<>1 -        s := PolibiusDecipher(word);('Расшифровывание элемента ',s);=4, k=1 - s := GronsfeldEncipher(word, '2178');('Шифрование элемента ',s)

k<>1 - s := GronsfeldDecipher(word, '2178');('Расшифровывание элемента ',s);

m=5, k=1 -          s := ViginerEncipher(word, 'BORED');('Шифрование элемента ',s);

        

Программа выполнена, с помощью функций текст преобразован и выведен на экран операторами.

.1.2 Подробнее о программе. Использованные функции и процедуры

Функция chr (X) - возвращает символ с определенным номером в ASCII таблице. Function Chr(X : Byte) : Char.

Функция ord (X) - возвращает порядковый номер значения выражения порядкового типа (нумерация начинается с нуля)

function Ord(x: <порядковый тип>): Longint; - выражение любого порядкового типа.

Процедура Inc - увеличивает значение переменной

Procedure Inc(Var X [ ; N : Longint ] ).

Параметр X - переменная перечислимого типа или переменная типа PChar, если допускается расширенный синтаксис, а N - выражение целочисленного типа. Значение X увеличивается на 1, если параметр N не определен, или на N, если праметр N определен, то есть Inc(X) соответствует X:=X+1, а Inc(X, N) соответствует X:=X+N.

Процедура Dec- уменьшает значение переменной

Procedure Dec(Var X[ ; N : Longint]).

По аналогии с процедурой Inc.

Функция Succ возвращает следующий элемент параметра.

Function Succ(X) : (тип параметра).

Параметр X в функции Succ является выражением перечислимого типа. Значение результата вызова функции Succ будет того же типа, что и X, так как является последователем X.('A') = 'B'(функция)- возвращает предшественника параметра.

Function Pred(X) : < тип параметра >;

По аналогии с функцией Succ.

Function Pos(Substr : String; S : String) : Byte; -ищет подстроку в строке.

Параметры Substr и S - строковые выражения. Pos ищет первое вхождение строки Substr в строку S и возвращает целочисленное значение, которое является индексом первого символа Substr внутри S. Если строка Substr не найдена, то Pos возвращает нуль. [7]

.1.3 Работа основных функций в программе

.        Все функции получают буквенное значение переменной word, далее:Atbash

Служит для шифрования и дешифрования методом Атбаш.

Запускается цикл, в котором каждой букве присваивается новое значение из таблицы ASCII. Функция ord возвращает символу под номером i его номер из таблица ASHII, далее этот номер вычитается из 219, если символ принадлежит определённому промежутку (219=97+122, т.е. равен сумме номеров символа a и z; 155=65+90, сумма номеров символов Z и a). В следующем действии функция chr возвращает символьный эквивалент получившемуся числу.

Функция выглядит следующим образом:Atbash(toCode: string): string;i: integer;i := 1 to length(toCode) do((toCode[i]>='a') and (toCode[i]<='z'))toCode[i]:=Chr(219-Ord(toCode[i]));((toCode[i]>='A') and (toCode[i]<='Z'))toCode[i]:=Chr(155-Ord(toCode[i]));:= toCode;;CaesarEncipher (…)

Служит для шифрования методом Цезаря.

Запускается цикл, в котором каждой букве присваивается новое значение из таблицы ASCII. Функция ord возвращает символу под номером i его номер из таблица ASHII, далее к этому номеру прибавляется число 3, тем самым осуществляется «сдвиг» порядкового номера на 3 позиции вправо.

Функция выглядит следующим образом:CaesarEncipher(toCode: string): string;i, T: integer;i := 1 to length(toCode) do begin[ i ] := Chr((Ord(toCode[ i ]) + 3));;:= toCode;;CaesarDecipher (…)

Служит для дешифрования методом Цезаря.

Процесс аналогичен шифрованию, но «сдвиг» элемента осуществляется на 3 позиции влево.

Функция выглядит следующим образом:CaesarDecipher(toDecode: string): string;i, T: integer;i := 1 to length(toDecode) do begin[ i ] := Chr((Ord(toDecode[ i ]) - 3));;:= toDecode;;PolibiusEncipher (…)

Служит для шифрования методом Полибия.

Запускается цикл, в котором каждой букве присваивается новое значение, состоящее из двух символов ix и jx, где оба символа берутся из первой строки: ix соответствует номеру строки элемента, jx номеру столбца.

Функция выглядит следующим образом:PolibiusEncipher(toCode: string): string;: integer;, jx: char;: string;:= '';i := 1 to length(toCode) do beginix := 'A' to 'H' dojx := 'A' to 'H' doTPolibius[ix, jx] = toCode[ i ] then begin:= s + ix + jx;;;;:= s; PolibiusDecipher (…)

Служит для дешифрования методом Полибия.

Запускается цикл while, в котором берётся первый символ, выражения требующего дешифровки (он представляет строку исходного символа), затем второй символ (он представляет столбец исходного символа). После этого в массиве TViginer на пересечении строки и столбца берётся нужный элемент. (Функция succ возвращает следующее буквенное значение, т.к. при шифровании элемент заменяется двумя символами, идущими подряд. Функция inc увеличивает величину на 2 ).: string =

'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmopqrstuvwxyz';: array['A' .. 'H','A' .. 'H'] of char = (

('A', 'B', 'C', 'D', 'E', 'F', 'G', 'H'),

('I', 'J', 'K', 'L', 'M', 'N', 'O', 'P'),

('Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X'),

('Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f'),

('g', 'h', 'i', 'j', 'k', 'l', 'm', 'n'),

('o', 'p', 'q', 'r', 's', 't', 'u', 'v'),

('w', 'x', 'y', 'z', '1', '2', '3', '4'),

('5', '6', '7', '8', '9', '_', '+', '-') );

Функция выглядит следующим образом:PolibiusDecipher(toDecode: string): string;: integer;: string;:= '';:= 1;i <= length(toDecode) do begin:= s + TPolibius[toDecode[ i ], toDecode[succ(i)]];(i, 2);;:= s;GronsfeldEncipher (…)

Служит для шифрования методом Гронсфельда.

Запускается цикл for, в котором зашифрованный элемент образуется засчёт присвоения первоначальному элементу номера, равного сумме номера этого элемента, номера символа ключа и разности номера элемента «0», т.к. он идёт перед порядковым номером символа ключа (из таблицы ASCHII).

Функция выглядит следующим образом:GronsfeldEncipher(toCode, K: string): string;i, T: integer;i := 1 to length(toCode) do begin[ i ] := Chr(Ord(toCode[ i ])+(Ord(K[(pred(i) mod length(K)) + 1]) - Ord('0')));;:= toCode;;GronsfeldDecipher (…)

Служит для дешифрования методом Гронсфельда.

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

Функция выглядит следующим образом:GronsfeldDecipher(toDecode, K: string): string;i, T: integer;i := 1 to length(toDecode) do begin[ i ] := Chr(Ord(toDecode[i])-(Ord(K[(pred(i) mod length(K)) + 1]) - Ord('0')));;:= toDecode;;ViginerEncipher (…)

Служит для шифрования методом Виженера.

Запускается цикл, в котором новое значение символа получается благодаря:

в начале использованию переменной, которой присваивается значение, равное номеру элемента, вычисленного функцией pos (функция pos ищет первое пересечение буквы кодового слова и массива TViginer, затем выдаёт номер данного элемента в массиве), минус 1

конечный элемент берётся из массива TViginer. Его номер равен номеру элемента пересечения символа вводимого текста минус 1, прибавить подсчитанную выше переменную, взять целую часть от деления всего этого на длину массива (52 символа) и прибавить 1.

Функция выглядит следующим образом:: string =

'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmopqrstuvwxyz';ViginerEncipher(toCode, K: string): string;: integer;: byte;: string;:= '';i := 1 to length(toCode) do begin:= pred(pos(K[ (pred(i) mod length(K)) + 1 ], TViginer));:= s + TViginer[ ((pred(pos(toCode[ i ], TViginer)) + currK) mod length(TViginer))+1];;:= s;;ViginerDecipher (…)

Служит для дешифрования методом Виженера.

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

Функция выглядит следующим образом:ViginerDecipher(toDecode, K: string): string;, T: integer;: byte;: string;:= '';i := 1 to length(toDecode) do begin:= pred(pos(K[ (pred(i) mod length(K)) + 1 ], TViginer));:= pred(pos(toDecode[ i ], TViginer)) - currK;       f T < 0 then inc(T, length(TViginer));:= s + TViginer[T + 1];;:= s;

end;

.        Все функции возвращают переменную toCode или toDecode в значении s.

2.1.4 Блок-схемы

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

program shifrovanie;

var l:real;: string = ';: array['A' .. 'H','A' .. 'H'] of char = (

('A', 'B', 'C', 'D', 'E', 'F', 'G', 'H'),

('I', 'J', 'K', 'L', 'M', 'N', 'O', 'P'),

('Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X'),

('Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f'),

('o', 'p', 'q', 'r', 's', 't', 'u', 'v'),

('w', 'x', 'y', 'z', '1', '2', '3', '4'),

('5', '6', '7', '8', '9', '_', '+', '-'));Atbash(toCode: string): string;i: integer;i := 1 to length(toCode) do((toCode[i]>='a') and (toCode[i]<='z'))toCode[i]:=Chr(219-Ord(toCode[i]));((toCode[i]>='A') and (toCode[i]<='Z'))toCode[i]:=Chr(155-Ord(toCode[i]));:= toCode;;CaesarEncipher(toCode: string): string;i, T: integer;i := 1 to length(toCode) do begin[ i ] := Chr((Ord(toCode[ i ]) + 3));;:= toCode;;CaesarDecipher(toDecode: string): string;i, T: integer;i := 1 to length(toDecode) do begin[ i ] := Chr((Ord(toDecode[ i ]) - 3));;:= toDecode;;PolibiusEncipher(toCode: string): string;: integer;, jx: char;: string;:= '';i := 1 to length(toCode) do beginix := 'A' to 'H' dojx := 'A' to 'H' doTPolibius[ix, jx] = toCode[ i ] then begin:= s + ix + jx; break;;;:= s;PolibiusDecipher(toDecode: string): string;: integer;: string;:= '';:= 1;i <= length(toDecode) do begin:= s + TPolibius[toDecode[ i ], toDecode[succ(i)]];(i, 2);;:= s;GronsfeldEncipher(toCode, K: string): string;i, T: integer;i := 1 to length(toCode) do begin[ i ] := Chr(Ord(toCode[ i ])+(Ord(K[(pred(i) mod length(K)) + 1]) - Ord('0')));;:= toCode;;GronsfeldDecipher(toDecode, K: string): string;i, T: integer;i := 1 to length(toDecode) do begin[ i ] := Chr(Ord(toDecode[i])-(Ord(K[(pred(i) mod length(K)) + 1]) - Ord('0')));;:= toDecode;;ViginerEncipher(toCode, K: string): string;: integer;: byte;: string;:= '';i := 1 to length(toCode) do begin:= pred(pos(K[ (pred(i) mod length(K)) + 1 ], TViginer));:= s+TViginer[ ((pred(pos(toCode[ i ], TViginer)) + currK) mod length(TViginer)) + 1 ];;:= s;;ViginerDecipher(toDecode, K: string): string;, T: integer;: byte;: string;:= '';i := 1 to length(toDecode) do begin:= pred(pos(K[ (pred(i) mod length(K)) + 1 ], TViginer));:= pred(pos(toDecode[ i ], TViginer)) - currK;T < 0 then inc(T, length(TViginer));:= s + TViginer[T + 1];;:= s;;: string;: string;: real;: real;

writeln('Введите номер интересующего метода шифрования:1-Атбаш,2-Цезарь,3-Полибий,4-Гронсфельд,5-Виженер');(m);

writeln('Введите слово');

readln(word);('1-зашифровать/2-расшифровать ');

readln(k);m=1 then begink=1 then begin:= Atbash(word);

writeln('Шифрование элемента ',s);

endbegin:= Atbash(word);

writeln('Расшифровывание элемента ', s);

end;;m=2 then begink=1 then begin:= CaesarEncipher(word);('Шифрование элемента ',s)

endbegin:= CaesarDecipher(word);

writeln('Расшифровывание элемента ',s);

end;;m=3 then begink=1 then begin:= PolibiusEncipher(word);

writeln('Шифрование элемента ',s)

endbegin:= PolibiusDecipher(word);

writeln('Расшифровывание элемента ',s);

end;end;m=4 then begink=1 then begin:= GronsfeldEncipher(word, '2178');

writeln('Шифрование элемента ',s)

endbegin:= GronsfeldDecipher(word, '2178');('Расшифровывание элемента ',s);

end;;m=5 then begink=1 then begin:= ViginerEncipher(word, 'BORED');('Шифрование элемента ',s)

endbegin:= ViginerDecipher(word, 'BORED');

writeln('Расшифровывание элемента ',s);;end;end.

2.1.6 Скриншоты

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

Рисунок 7 - Скриншот тестирования функций «Атбаш», «Цезарь»

Рисунок 8 - Скриншот тестирования функций «Полибий», «Гронсфельд», «Виженер»

Вывод: зашифрованные и расшифрованные данные полностью совпадают.

3. ОСНОВЫЕ РЕЗУЛЬТАТЫ РАБОТЫ

Основными результатами работы стали:

.        Изложение материала по теме «шифрование и дешифрование текста пятью разными методами».

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

.        Описание программы

.        Составление блок-схемы, характеризующей работу программы

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

Выводы:

Я обрёл навыки работы в среде программирования Pascal. Результатом моей работы стала программа «Шифрование и дешифрование текста пятью методами».

СПИСОК ИСПОЛЬЗОВАННЫХ ИНФОРМАЦИОННЫХ ИСТОЧНИКОВ

1)      Web: <http://www.realcoding.net/article/view/>

)        Web: <http://ru.wikipedia.org/wiki/Шифр_подстановки>

)        Web: <http://ru.wikipedia.org/wiki/Шифр_Цезаря>

)        Web: <http://ru.wikipedia.org/wiki/Квадрат_Полибия>

)        Web: <http://ru.wikipedia.org/wiki/Полиалфавитный_шифр>

)        Web: <http://ru.wikipedia.org/wiki/Шифр_Виженера>

7)      Л.Д. Михелев. «Язык программирования паскаль» издательство.

Москва, 2007. - 432с.:ил.

8)      Web: <http://www.asciitable.com/>

)        Web: <http://pascal-video.ru/help-pascal.php?id=215>

)        Web: <http://www.cyberforum.ru/pascal/thread50710.html>

11)    Фарафонов В.В. Турбо Паскаль 7.0. Начальный курс: учеб. пособие. - М.: Кнорус, 2006.

)        Методические указания к лабораторным работам. ГОУВПО «воронежский государственный технический университет»; сост. Р.В.Батищев. Воронеж, 2006. 53с.


Не нашли материал для своей работы?
Поможем написать уникальную работу
Без плагиата!