Разработка программы шифрования текста
История появления и развития шифрования текста. Проблема шифрования и дешифрования текстовых сообщений в современности. Создание программы для зашифровки и расшифровки вводимого текста пятью методами: Атбаш, Цезаря, Полибия, Гронсфельда и Винжера.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | русский |
Дата добавления | 26.12.2011 |
Размер файла | 923,6 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
СОДЕРЖАНИЕ
Введение
1. ОБЩАЯ ХАРАКТЕРИСТИКА РАБОТЫ
1.1 Актуальность темы
1.2 Цель работы
1.3 Задачи работы
2. ОСНОВНОЕ СОДЕРЖАНИЕ
2.1 Описание работы программы
2.1.1 Этапы работы программы
2.1.2 Подробнее о программе. Использованные функции и процедуры
2.1.3 Работа основных функций в программе
2.1.4 Блок-схемы
2.1.5 Текст программы
2.1.6 Скриншоты
3. ОСНОВЫЕ РЕЗУЛЬТАТЫ РАБОТЫ
СПИСОК ИСПОЛЬЗОВАННЫХ
- ВВЕДЕНИЕ
- шифрование текст сообщение
- Шифрование -- это способ сокрытия исходного смысла сообщения или другого документа, обеспечивающий искажение его первоначального содержимого. Зачастую в более сложных шифрах для расшифровки уже зашифрованного сообщения помимо знания правил шифрования, требуется ключ к шифру. Под ключом в данном случае подразумевается конкретное секретное состояние параметров алгоритмов шифрования и дешифрования.
- Человечество использует шифрование с того момента, как появилась первая секретная информация - такая, доступ к которой не должен быть публичным.
- Шифрование появилось около четырех тысяч лет тому назад. Первым известным примером шифра считается египетский текст, созданный примерно в 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
- Зашифрованный текст: HYEMYDUMPS
- Ключ: 31415
- История и применение
- Идея использования лозунга (гаммы) без изображения указанных выше таблиц была предложена в 1734 году бельгийцем Хосе де Бронкхором и начальником первого дешифровального отделения в Германии, военным и дипломатом граф ом Гронсфельдом. [5]
- Шифр Виженера
- Шифр Виженера (фр. Chiffre de Vigenиre) -- метод полиалфавитного шифрования буквенного текста с использованием ключевого слова. Является простой формой многоалфавитной замены
- Правило шифрования
- Состоит из последовательности нескольких шифров Цезаря с различными значениями сдвига. Для зашифровывания может использоваться таблица алфавитов, называемая tabula recta или квадрат (таблица) Виженера. Применительно к латинскому алфавиту таблица Виженера составляется из строк по 26 символов, причём каждая следующая строка сдвигается на несколько позиций. Таким образом, в таблице получается 26 различных шифров Цезаря. На разных этапах кодировки шифр Виженера использует различные алфавиты из этой таблицы. На каждом этапе шифрования используются различные алфавиты, выбираемые в зависимости от символа ключевого слова.
- Рисунок 4- Таблица Виженера ( tabula recta)
- Например, предположим, что исходный текст имеет вид:
- ATTACKATDAWN
- Человек, посылающий сообщение, записывает ключевое слово («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. Углубление знаний и расширение навыков по разработке алгоритмов и их реализации на персональном компьютере.
2. Создание программы, способной зашифровывать и расшифровывать вводимый текст пятью способами:
Ш Методом Атбаш
Ш Шифром Цезаря
Ш Квадратом Полибия
Ш Методом Гронсфельда
Ш Методом Виженера
1.3 Задачи работы
Задачами данной работы являются:
1. Изложение материала по теме «шифрование и дешифрование текста пятью разными методами»
2. Описание алгоритма программы
3. Описание программы
4. Составление блок-схемы, характеризующей работу программы
5. Составление и испытание программы шифрующей и дешифрующей текст пятью различными методами
2. ОСНОВНОЕ СОДЕРЖАНИЕ
2.1 Описание работы программы.
Программа разработана на языке программирования Pascal и состоит главным образом из девяти функций:
function Atbash (…)
function CaesarEncipher (…)
function CaesarDecipher (…)
function PolibiusEncipher (…)
function PolibiusDecipher (…)
function GronsfeldEncipher (…)
function GronsfeldDecipher (…)
function ViginerEncipher (…)
function ViginerDecipher (…)
Функция ( Function(…) ) - это часть программы, которая вычисляет и возвращает значение.
Каждая из функций вычисляет и возвращает значение для определённого метода шифрования или дешифрования, в зависимости от того, какой метод выбран.
Программа устроена так, что выбрать определённый метод можно при помощи условного оператора.
Условный оператор (if) реализует выполнение определённых команд при условии, что некоторое логическое выражение (условие) принимает значение «истина» true.
Часть программы, включающую оператор if , с помощью которого программа обращается к нужной функции, передаёт ей значение и возвращает после вычисления, представлена ниже в пункте №7.
2.1.1 Этапы работы программы
1. При запуске программы процедура writeln выводит на экран сообщение 'Введите номер интересующего метода шифрования:1-Атбаш,2-Цезарь,3-Полибий,4-Гронсфельд,5-Виженер';
2. Процедура read считывает переменную m:real (тип данных- вещественные числа);
3. Процедура writeln выводит на экран сообщение 'Введите слово';
4. Процедура readln считывает переменную word:string (буквенного типа);
5. Процедура writeln выводит на экран сообщение '1-зашифровать/2-расшифровать ';
6. Процедура readln считывает переменную k:real (тип данных-вещественные числа);
7. Все переменные считаны - реализуется условный оператор:
если 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);
writeln('Расшифровывание элемента ',s);
m=3, k=1 - s := PolibiusEncipher(word);
writeln('Шифрование элемента ',s)
k<>1 - s := PolibiusDecipher(word);
writeln('Расшифровывание элемента ',s);
m=4, k=1 - s := GronsfeldEncipher(word, '2178');
writeln('Шифрование элемента ',s)
k<>1 - s := GronsfeldDecipher(word, '2178');
writeln('Расшифровывание элемента ',s);
m=5, k=1 - s := ViginerEncipher(word, 'BORED');
writeln('Шифрование элемента ',s);
k<>1 - s := ViginerDecipher(word, 'BORED');
writeln('Расшифровывание элемента ',s);
Программа выполнена, с помощью функций текст преобразован и выведен на экран операторами.
2.1.2 Подробнее о программе. Использованные функции и процедуры
Функция chr (X) - возвращает символ с определенным номером в ASCII таблице. Function Chr(X : Byte) : Char.
Функция ord (X) - возвращает порядковый номер значения выражения порядкового типа (нумерация начинается с нуля)
function Ord(x: <порядковый тип>): Longint;
X - выражение любого порядкового типа.
Процедура 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.
Succ('A') = 'B'
Pred (функция)- возвращает предшественника параметра.
Function Pred(X) : < тип параметра >;
По аналогии с функцией Succ.
Function Pos(Substr : String; S : String) : Byte; -ищет подстроку в строке.
Параметры Substr и S - строковые выражения. Pos ищет первое вхождение строки Substr в строку S и возвращает целочисленное значение, которое является индексом первого символа Substr внутри S. Если строка Substr не найдена, то Pos возвращает нуль. [7]
2.1.3 Работа основных функций в программе
1. Все функции получают буквенное значение переменной word, далее:
function Atbash
Служит для шифрования и дешифрования методом Атбаш.
Запускается цикл, в котором каждой букве присваивается новое значение из таблицы ASCII. Функция ord возвращает символу под номером i его номер из таблица ASHII, далее этот номер вычитается из 219, если символ принадлежит определённому промежутку (219=97+122, т.е. равен сумме номеров символа a и z; 155=65+90, сумма номеров символов Z и a). В следующем действии функция chr возвращает символьный эквивалент получившемуся числу.
Функция выглядит следующим образом:
function Atbash(toCode: string): string;
var i: integer;
begin
for i := 1 to length(toCode) do
if ((toCode[i]>='a') and (toCode[i]<='z'))
then toCode[i]:=Chr(219-Ord(toCode[i]));
if ((toCode[i]>='A') and (toCode[i]<='Z'))
then toCode[i]:=Chr(155-Ord(toCode[i]));
Atbash := toCode;
end;
function CaesarEncipher (…)
Служит для шифрования методом Цезаря.
Запускается цикл, в котором каждой букве присваивается новое значение из таблицы ASCII. Функция ord возвращает символу под номером i его номер из таблица ASHII, далее к этому номеру прибавляется число 3, тем самым осуществляется «сдвиг» порядкового номера на 3 позиции вправо.
Функция выглядит следующим образом:
function CaesarEncipher(toCode: string): string;
var i, T: integer;
begin
for i := 1 to length(toCode) do begin
toCode[ i ] := Chr((Ord(toCode[ i ]) + 3));
end;
CaesarEncipher := toCode;
end;
function CaesarDecipher (…)
Служит для дешифрования методом Цезаря.
Процесс аналогичен шифрованию, но «сдвиг» элемента осуществляется на 3 позиции влево.
Функция выглядит следующим образом:
function CaesarDecipher(toDecode: string): string;
var i, T: integer;
begin
for i := 1 to length(toDecode) do begin
toDecode[ i ] := Chr((Ord(toDecode[ i ]) - 3));
end;
CaesarDecipher := toDecode;
end;
function PolibiusEncipher (…)
Служит для шифрования методом Полибия.
Запускается цикл, в котором каждой букве присваивается новое значение, состоящее из двух символов ix и jx, где оба символа берутся из первой строки: ix соответствует номеру строки элемента, jx номеру столбца.
Функция выглядит следующим образом:
function PolibiusEncipher(toCode: string): string;
var
i: integer;
ix, jx: char;
s: string;
begin
s := '';
for i := 1 to length(toCode) do begin
for ix := 'A' to 'H' do
for jx := 'A' to 'H' do
if TPolibius[ix, jx] = toCode[ i ] then begin
s := s + ix + jx;
break;
end;
end;
PolibiusEncipher := s
end;
function PolibiusDecipher (…)
Служит для дешифрования методом Полибия.
Запускается цикл while, в котором берётся первый символ, выражения требующего дешифровки (он представляет строку исходного символа), затем второй символ (он представляет столбец исходного символа). После этого в массиве TViginer на пересечении строки и столбца берётся нужный элемент. (Функция succ возвращает следующее буквенное значение, т.к. при шифровании элемент заменяется двумя символами, идущими подряд. Функция inc увеличивает величину на 2 ).
TViginer: string =
'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmopqrstuvwxyz';
TPolibius: 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', '_', '+', '-') );
Функция выглядит следующим образом:
function PolibiusDecipher(toDecode: string): string;
var
i: integer;
s: string;
begin
s := '';
i := 1;
while i <= length(toDecode) do begin
s := s + TPolibius[toDecode[ i ], toDecode[succ(i)]];
inc(i, 2);
end;
PolibiusDecipher := s
end;
function GronsfeldEncipher (…)
Служит для шифрования методом Гронсфельда.
Запускается цикл for, в котором зашифрованный элемент образуется засчёт присвоения первоначальному элементу номера, равного сумме номера этого элемента, номера символа ключа и разности номера элемента «0», т.к. он идёт перед порядковым номером символа ключа (из таблицы ASCHII).
Функция выглядит следующим образом:
function GronsfeldEncipher(toCode, K: string): string;
var i, T: integer;
begin
for i := 1 to length(toCode) do begin
toCode[ i ] := Chr(Ord(toCode[ i ])+(Ord(K[(pred(i) mod length(K)) + 1]) - Ord('0')));
end;
GronsfeldEncipher := toCode;
end;
function GronsfeldDecipher (…)
Служит для дешифрования методом Гронсфельда.
Принцип аналогичен шифрованию, с разницей в том, что сдвиг, образованный ключом в данном случае снимается.
Функция выглядит следующим образом:
function GronsfeldDecipher(toDecode, K: string): string;
var i, T: integer;
begin
for i := 1 to length(toDecode) do begin
toDecode[ i ] := Chr(Ord(toDecode[i])-(Ord(K[(pred(i) mod length(K)) + 1]) - Ord('0')));
end;
GronsfeldDecipher := toDecode;
end;
function ViginerEncipher (…)
Служит для шифрования методом Виженера.
Запускается цикл, в котором новое значение символа получается благодаря:
в начале использованию переменной, которой присваивается значение, равное номеру элемента, вычисленного функцией pos (функция pos ищет первое пересечение буквы кодового слова и массива TViginer, затем выдаёт номер данного элемента в массиве), минус 1
конечный элемент берётся из массива TViginer. Его номер равен номеру элемента пересечения символа вводимого текста минус 1, прибавить подсчитанную выше переменную, взять целую часть от деления всего этого на длину массива (52 символа) и прибавить 1.
Функция выглядит следующим образом:
TViginer: string =
'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmopqrstuvwxyz';
function ViginerEncipher(toCode, K: string): string;
var
i: integer;
currK: byte;
s: string;
begin
s := '';
for i := 1 to length(toCode) do begin
currK := pred(pos(K[ (pred(i) mod length(K)) + 1 ], TViginer));
s := s + TViginer[ ((pred(pos(toCode[ i ], TViginer)) + currK) mod length(TViginer))+1];
end;
ViginerEncipher := s;
end;
function ViginerDecipher (…)
Служит для дешифрования методом Виженера.
Отличается от предыдущего шифрования номером символа, берущегося из массива. Он равен номеру пересечения элемента, уменьшенному на значение подсчитанной ранее переменной.
Функция выглядит следующим образом:
function ViginerDecipher(toDecode, K: string): string;
var
i, T: integer;
currK: byte;
s: string;
begin
s := '';
for i := 1 to length(toDecode) do begin
currK := pred(pos(K[ (pred(i) mod length(K)) + 1 ], TViginer));
T := pred(pos(toDecode[ i ], TViginer)) - currK;
I f T < 0 then inc(T, length(TViginer));
s := s + TViginer[T + 1];
end;
ViginerDecipher := s;
end;
2. Все функции возвращают переменную toCode или toDecode в значении s.
2.1.4 Блок-схемы
2.1.5 Текст программы
program shifrovanie;
var l:real;
const
TViginer: string =
ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmopqrstuvwxyz';
TPolibius: 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', '_', '+', '-'));
function Atbash(toCode: string): string;
var i: integer;
begin
for i := 1 to length(toCode) do
if ((toCode[i]>='a') and (toCode[i]<='z'))
then toCode[i]:=Chr(219-Ord(toCode[i]));
if ((toCode[i]>='A') and (toCode[i]<='Z'))
then toCode[i]:=Chr(155-Ord(toCode[i]));
Atbash := toCode;
end;
function CaesarEncipher(toCode: string): string;
var i, T: integer;
begin
for i := 1 to length(toCode) do begin
toCode[ i ] := Chr((Ord(toCode[ i ]) + 3));
end;
CaesarEncipher := toCode;
end;
function CaesarDecipher(toDecode: string): string;
var i, T: integer;
begin
for i := 1 to length(toDecode) do begin
toDecode[ i ] := Chr((Ord(toDecode[ i ]) - 3));
end;
CaesarDecipher := toDecode;
end;
function PolibiusEncipher(toCode: string): string;
var
i: integer;
ix, jx: char;
s: string;
begin
s := '';
for i := 1 to length(toCode) do begin
for ix := 'A' to 'H' do
for jx := 'A' to 'H' do
if TPolibius[ix, jx] = toCode[ i ] then begin
s := s + ix + jx; break;
end;
end;
PolibiusEncipher := s
end;
function PolibiusDecipher(toDecode: string): string;
var
i: integer;
s: string;
begin
s := '';
i := 1;
while i <= length(toDecode) do begin
s := s + TPolibius[toDecode[ i ], toDecode[succ(i)]];
inc(i, 2);
end;
PolibiusDecipher := s
end;
function GronsfeldEncipher(toCode, K: string): string;
var i, T: integer;
begin
for i := 1 to length(toCode) do begin
toCode[ i ] := Chr(Ord(toCode[ i ])+(Ord(K[(pred(i) mod length(K)) + 1]) - Ord('0')));
end;
GronsfeldEncipher := toCode;
end;
function GronsfeldDecipher(toDecode, K: string): string;
var i, T: integer;
begin
for i := 1 to length(toDecode) do begin
toDecode[ i ] := Chr(Ord(toDecode[i])-(Ord(K[(pred(i) mod length(K)) + 1]) - Ord('0')));
end;
GronsfeldDecipher := toDecode;
end;
function ViginerEncipher(toCode, K: string): string;
var
i: integer;
currK: byte;
s: string;
begin
s := '';
for i := 1 to length(toCode) do begin
currK := pred(pos(K[ (pred(i) mod length(K)) + 1 ], TViginer));
s := s+TViginer[ ((pred(pos(toCode[ i ], TViginer)) + currK) mod length(TViginer)) + 1 ];
end;
ViginerEncipher := s;
end;
function ViginerDecipher(toDecode, K: string): string;
var
i, T: integer;
currK: byte;
s: string;
begin
s := '';
for i := 1 to length(toDecode) do begin
currK := pred(pos(K[ (pred(i) mod length(K)) + 1 ], TViginer));
T := pred(pos(toDecode[ i ], TViginer)) - currK;
if T < 0 then inc(T, length(TViginer));
s := s + TViginer[T + 1];
end;
ViginerDecipher := s;
end;
var
s: string;
word: string;
m: real;
k: real;
begin
writeln('Введите номер интересующего метода шифрования:1-Атбаш,2-Цезарь,3-Полибий,4-Гронсфельд,5-Виженер');
readln(m);
writeln('Введите слово');
readln(word);
writeln('1-зашифровать/2-расшифровать ');
readln(k);
if m=1 then begin
if k=1 then begin
s := Atbash(word);
writeln('Шифрование элемента ',s);
end
else begin
s := Atbash(word);
writeln('Расшифровывание элемента ', s);
end;
end;
if m=2 then begin
if k=1 then begin
s := CaesarEncipher(word);
writeln('Шифрование элемента ',s)
end
else begin
s := CaesarDecipher(word);
writeln('Расшифровывание элемента ',s);
end;
end;
if m=3 then begin
if k=1 then begin
s := PolibiusEncipher(word);
writeln('Шифрование элемента ',s)
end
else begin
s := PolibiusDecipher(word);
writeln('Расшифровывание элемента ',s);
end;end;
if m=4 then begin
if k=1 then begin
s := GronsfeldEncipher(word, '2178');
writeln('Шифрование элемента ',s)
end
else begin
s := GronsfeldDecipher(word, '2178');
writeln('Расшифровывание элемента ',s);
end;
end;
if m=5 then begin
if k=1 then begin
s := ViginerEncipher(word, 'BORED');
writeln('Шифрование элемента ',s)
end
else begin
s := ViginerDecipher(word, 'BORED');
writeln('Расшифровывание элемента ',s);
end;end;end.
2.1.6 Скриншоты
Попробуем зашифровать и расшифровать слово «Политех» каждым из пяти методов шифрования, получим:
Рисунок 7 - Скриншот тестирования функций «Атбаш», «Цезарь»
Рисунок 8 - Скриншот тестирования функций «Полибий», «Гронсфельд», «Виженер»
Вывод: зашифрованные и расшифрованные данные полностью совпадают.
3. ОСНОВЫЕ РЕЗУЛЬТАТЫ РАБОТЫ
Основными результатами работы стали:
1. Изложение материала по теме «шифрование и дешифрование текста пятью разными методами».
2. Описание алгоритма программы
3. Описание программы
4. Составление блок-схемы, характеризующей работу программы
5. Составление и испытание программы шифрующей и дешифрующей текст пятью различными методами
Выводы:
Я обрёл навыки работы в среде программирования Pascal. Результатом моей работы стала программа «Шифрование и дешифрование текста пятью методами».
СПИСОК ИСПОЛЬЗОВАННЫХ ИНФОРМАЦИОННЫХ ИСТОЧНИКОВ
1) Web: http://www.realcoding.net/article/view/
2) Web: http://ru.wikipedia.org/wiki/Шифр_подстановки
3) Web: http://ru.wikipedia.org/wiki/Шифр_Цезаря
4) Web: http://ru.wikipedia.org/wiki/Квадрат_Полибия
5) Web: http://ru.wikipedia.org/wiki/Полиалфавитный_шифр
6) Web: http://ru.wikipedia.org/wiki/Шифр_Виженера
7) Л.Д. Михелев. «Язык программирования паскаль» издательство.
Москва, 2007. - 432с.:ил.
8) Web: http://www.asciitable.com/
9) Web: http://pascal-video.ru/help-pascal.php?id=215
10) Web: http://www.cyberforum.ru/pascal/thread50710.html
11) Фарафонов В.В. Турбо Паскаль 7.0. Начальный курс: учеб. пособие. - М.: Кнорус, 2006.
12) Методические указания к лабораторным работам. ГОУВПО «воронежский государственный технический университет»; сост. Р.В.Батищев. Воронеж, 2006. 53с.
Размещено на Allbest.ru
Подобные документы
Создание приложения для шифрования–дешифрования текста тремя алгоритмами (алгоритм "Цезаря","Модифицированного Цезаря", "Скитала"). Исходный текст компонента. Инструкция пользователя, возможность просмотра примерного алгоритма. Исходный текст программы.
курсовая работа [2,8 M], добавлен 27.02.2015Схема работы и требования к программам шифрования и дешифрования. Алгоритмы и тексты программы шифрования и программы дешифрования, выполненные на языке программирования C/C++. Содержание файла с исходным текстом, с шифротекстом, с дешифрованным текстом.
курсовая работа [24,7 K], добавлен 20.10.2014Основные требования к разрабатываемым программам и исходным текстовым файлам. Характеристика шифров замены. Укрупненные структурные схемы и коды программ шифрования и дешифрования, скриншоты их выполнения. Пример зашифрованного текста и его дешифрования.
курсовая работа [556,8 K], добавлен 14.01.2013Проблема скрытия и защиты информации от несанкционированного использования. История создания шифра. Решения задачи шифрования текста и кодирования данных. Тестирование полученного приложения и анализ работы программы с точки зрения пользователя.
курсовая работа [3,0 M], добавлен 24.11.2013Возможности создания и обработки графики. Алгоритм шифрования текста в графику. Изменения цветовых каналов. Инициализация объектов html-сущностей. Формирование декодированной строки. Инструменты для обработки массивов, текстовых данных и графики.
курсовая работа [50,5 K], добавлен 26.11.2013Разработка программы, реализующей процедуры шифрования и расшифрования текста по стандарту DES (Data Encryption Standard). Структура алгоритма шифрования, схема выработки ключевых элементов. Использование криптографического программного средства.
курсовая работа [1,7 M], добавлен 15.06.2013Понятие информационной безопасности. История развития криптографии. Функции информационных моделей. Переменные, используемые при разработке прикладной программы для шифрования и дешифрования сообщений с помощью шифра Цезаря. Блок-схема общего алгоритма.
курсовая работа [975,5 K], добавлен 11.06.2014Принцип программной реализации классических криптографических методов. Метод шифрования с использованием таблицы Виженера. Создание текстового редактора "Блокнот", содержащего методы шифрования. Вербальный алгоритм и программа для методов шифрования.
курсовая работа [2,0 M], добавлен 20.01.2010Появление шифров, история эволюции криптографии. Способ приложения знаний особенностей естественного текста для нужд шифрования. Критерии определения естественности. Способ построения алгоритмов симметричного шифрования. Криптосистема с открытым ключом.
реферат [452,2 K], добавлен 31.05.2013Автоматизация процесса шифрования на базе современных информационных технологий. Криптографические средства защиты. Управление криптографическими ключами. Сравнение симметричных и асимметричных алгоритмов шифрования. Программы шифрования информации.
курсовая работа [795,7 K], добавлен 02.12.2014