Обоснование выбора и краткая характеристика языка программирования.

СОДЕРЖАНИЕ

1. ОБЩАЯ ЧАСТЬ…………………………………………………..8

 

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

 

1.2 Цель работы………………………………………………………13

 

1.3 Задачи работы…………………………………………………….14

 

1.4Обоснование выбора и краткая характеристика языка ………15

2.1 Описание работы программы……………………………………16

 

2.1.1 Блок-схемы……………………………………………………...19

 

2.1.2Список литературы………………………………………………20

 

2.1.3 Скриншоты………………………………………………………21

 

2.1.4 Код программы………………………………………………….22


 

ВВЕДЕНИЕ

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

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

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

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

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

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

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

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

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

Атбаш

Атбамш (ивр. аъб"щэ) -- простой шифр подстановки для иврита.

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

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

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

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

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

История

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

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

Метод Цезаря

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

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

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

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

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

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

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

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

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

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

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

Применительно к современному латинскому алфавиту из 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:

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

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

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

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

Ключ: 31415

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

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

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

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

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

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

- Таблица Виженера( tabularecta)

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

ATTACKATDAWN

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

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

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

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

Ключ: LEMONLEMONLE

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

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

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

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

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

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

То, что сейчас известно под шифром Виженера, впервые описал Джованни Батиста Беллазо в своей книге Lacifradel. Sig. GiovanBattistaBellasо. Он использовал идею tabularectaТрисемуса, но добавил ключ для переключения алфавитов шифра через каждую букву. [6]


 

 

ОБЩАЯ ЧАСТЬ

Система шифрования Цезаря

Шифр Цезаря является частным случаем шифра простой замены (одноалфавитной подстановки), Свое название этот шифр получил по имени, римского императора Гая Юлия Цезаря, который использовал этот шифр при переписке с Цицеронам (около 50г. до н.э).

При шифровании исходного текста каждая буква заменялась на другую букву того же алфавита по следующему правилу. Заменяющая буква определяется путем смещения по алфавиту от исходной буквы на К букв. При достижении конца алфавита выполнялся циклический переход к его началу Цезарь использовал шифр замены при смещении К = 3. Такой шифр замены можно задать таблицей подстановок, содержащей соответствующие нары букв открытого текста и шифртекста. Совокупность возможных подстановок для К = 3показана в табл 3.3:

Например, послание Цезаря:

VENI VIDI VICI

(в переводе означает "Пришел, Увидел, Победил"), направленное его другу Аминтию после победы над понтийским царем Фарпаком, сыном Митридата, выглядело бы в зашифрованном виде так:

YHQL YLGL YLFL

Таблица 3.3 Одноалфавитныс подстановки (К = 3, m = 26):


Выполним математический анализ шифра простой замены (подстановки).

Подстановка в алфавите является взаимно однозначным отображением из на :

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

Симметричная группа обладает следующими свойствами:

 


  • Замкнутость. Произведение подстановок является подстановкой:


;

 


  • Ассоциативность. Оба способа заключения в скобки произведения подстановок .


- дают одинаковый результат

 


  • Существование единичного элемента. Подстановка , определенная как:


,

является единственным единичным элементом группы по умножению:

для всех .

 


  • Существование обратных элементов. Для каждой подстановки имеется взаимно однозначно определенная обратная подстановка, обозначаемая , которая удовлетворяет соотношению:


Указанные свойства являются аксиомами группы. Ключ подстановки для алфавита представляет собой последовательность элементов симметричной группы из :

, , .

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

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

На рис 3.8 представлена схема реализации подстановки

.

Отметим характерные особенности подстановки :

 


  • Открытый текст шифруется побуквенно (буква за буквой);

  • i-я буква шифртекста является функцией только i-й компоненты ключа и i-й буквы открытого текста;

  • Шифрование n-граммы производится в соответствии с формулой:


Рис. 3.8. Схема подстановки .

Система Цезаря представляет собой одноалфавитную подстановку, которая шифрует n-грамму открытого текста в n-грамму шифртекста согласно следующему правилу:


 

 

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

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

 

 

 

Цель работы.

Цель работы: знакомство с простейшими приемами шифрования и де­шифрования текстовой информации..


 

 

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


 

 

Обоснование выбора и краткая характеристика языка программирования.

RTTI (Runtime Type Information) былотщательнопереработанов Delphi 2010.
RTTI является центральным элементом, на котором написано Delphi IDE, он существует со времен первого выпуска, однако я слышал от некоторых людей на протяжении многих лет, что они попытались использовать RTTI и нашли это слишком сложным и замысловатым, особенно по сравнению сReflection API в Java и .NET. Вот это настоящий позор, поскольку возможность писать код для запроса подробной информации о других объектах, не зная заранее их типа, это действительно мощная возможность.

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


Поддержка Microsoft .NET

Delphi 7 с помощью диалоговой панели ImportTypeLibrary можно создать COM-интерфейсы к сборкам Microsoft .NET c применением COM Interop — средств обеспечения совместимости COM и .NET.

Для того чтобы можно было создавать приложения, в дальнейшем совместимые с платформой Microsoft .NET, вкомпиляторDelphi были добавлены три дополнительных сообщения: Unsafe_Type, Unsafe_Code и Unsafe_Cast. Эти сообщения указывают на то, что корректность выполнения указанных операторов не может быть проанализирована Just-In-Time-компилятором Microsoft .NET (примерами таких операторов являются манипуляции с указателями и непосредственная запись в ячейки памяти).

Данные сообщения можно сделать доступными с помощью директивы {$WARN UNSAFE_CODE ON}, запуска компилятора с соответствующим ключом (dcc32 -W+UNSAFE_CODE) либо отметив соответствующие опции на странице CompilerMessages диалоговой панели ProjectOptions (рис. 2).

И наконец, во все редакции Delphi 7 включена предварительная версия (preview) компилятора Delphifor .NET, позволяющая создавать приложения для платформы .NET. Впрочем, этот компилятор заслуживает отдельного разговора и, если будет такая возможность, мы вернемся к этой теме чуть позже.

 

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

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

Рис.1.2.2. Главная страница прогнраммы

functionAtbash (…)

functionCaesarEncipher (…)

functionCaesarDecipher (…)

functionPolibiusEncipher (…)

functionPolibiusDecipher (…)

functionGronsfeldEncipher (…)

functionGronsfeldDecipher (…)

functionViginerEncipher (…)

functionViginerDecipher (…)

Функция ( 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 таблице. FunctionChr(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 возвращает нуль. [


 

 

НАЧАЛО
ЗАСТАВКА
О ПРОГРАММЕ
ШИФРОВАНИЕ
ВЫХОД
2.1.1 Блок схема


 

Список литературы

 

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

1. Архангельский А.Я. Object Pascal в Delphi 5. – М.БИНОМ. 1999

2. Архангельский А.Я. Программирование в Delphi 7. – М., 2004

3. Бобровский А.Б. Англо-русский словарь по программированию и информатике. – М., 1990

4. Delphi 7. Учебный курс./Под ред. С.И.Бобровского. – СПб.: Питер 2003

5. Информатика/ Под ред. Н.В.Макаровой. – М., 2003

6. Могилев А.В., Пак Н.И., Хеннер Е.К. Информатика. – М., 1999

7. Орлов С.А. Технологии разработки программного обеспечения. – СПб., 2003

8. Семакин И., Шеина Т. Преподавание базового курса информатике в средней школе. Методическое пособие – М., 2000

9. Угринович Н., Морозов В., Нечаев В. Преподавание курса «Информатика и информационные технологии» Методическое пособие – М., 2002

10. Фаронов В.В. Delphi. Программирование на языке высокого уровня. – СПб., 2004.

11. Фаронов В.В. Turbo Pascal 7.0. Начальный курс. Учебное пособие. Издание 7-е, переработанное. –М.: «Нолидж», 2000

 

Скриншоты

Рис.1.2.3. Вид программы в Delphi.

 

                                 Рис.1.2.1. ГлавнаястраницаDelphi.

 

Кодпрограммы

unitencr;

 

interface

 

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, ComCtrls, StdCtrls, XPMan,ShellApi;

 

type

TShifCes = class(TForm)

stranicy: TPageControl;

OneTasck: TTabSheet;

TwoTasck: TTabSheet;

eText: TMemo;

eOffset: TEdit;

BEnCrypt: TButton;

BDeCrypt: TButton;

smesh: TLabel;

final: TLabel;

eBrowse: TEdit;

Bbrowse: TButton;

eDecr: TEdit;

DeBrowse: TButton;

OpenFile: TOpenDialog;

XPManifest1: TXPManifest;

Bexit: TButton;

Bext: TButton;

Eresult: TLabel;

dresult: TLabel;

TabSheet1: TTabSheet;

Memo1: TMemo;

Edit1: TEdit;

Edit2: TEdit;

Button1: TButton;

Button2: TButton;

Button3: TButton;

Memo2: TMemo;

TabSheet2: TTabSheet;

stext: TEdit;

shifr: TButton;

nmatrix: TEdit;

mmatrix: TEdit;

Label1: TLabel;

Label2: TLabel;

lencrypt: TLabel;

by_exit: TButton;

Button4: TButton;

lll: TLabel;

Button5: TButton;

procedureBEnCryptClick(Sender: TObject);

procedureBDeCryptClick(Sender: TObject);

procedureBbrowseClick(Sender: TObject);

procedureDeBrowseClick(Sender: TObject);

procedureBexitClick(Sender: TObject);

procedureBextClick(Sender: TObject);

procedure Button1Click(Sender: TObject);

procedure Button2Click(Sender: TObject);

procedure Button3Click(Sender: TObject);

procedureshifrClick(Sender: TObject);

procedureby_exitClick(Sender: TObject);

procedure Button4Click(Sender: TObject);

procedure Button5Click(Sender: TObject);

 

private

{ Private declarations }

public

{ Public declarations }

end;

 

var

ShifCes: TShifCes;

tabl:array of array of string;

t,str:string;

m,n:integer;

//basic------------------------

implementation

 

{$R *.dfm}

 

procedureTShifCes.BEnCryptClick(Sender: TObject);

vari,o,ofset: integer;

str:string;

x:char;

begin

try

final.Caption:='';

str:=eText.Lines.Text;

ofset:=strtoInt(eoffset.Text);

for i:=1 to length(str) do

begin

o:=ord(str[i])+ofset;

if o >= 256 then dec(o, 256);

 

x:=chr(o);

final.Caption:=final.Caption+x;

end;

exceptMessageDlg('Внимание! Вы не правильно ввели текст или смещение',mtWarning ,[mbOK ],1);

end;

end;

procedureTShifCes.BDeCryptClick(Sender: TObject);

var

i,o,k:integer;

str:string;

y:char;

begin

try

str:=final.Caption;

k:=strtoInt(eoffset.Text);

final.Caption:=' DeCrypt=';

for i:=1 to length(str) do

begin

o:=ord(str[i])-k;

if o < 0 then Inc(o, 256);

y:=chr(o);

final.Caption:=final.Caption+y;

end;

exceptMessageDlg('Сначалазашифруйтетекст!!!',mtWarning  ,[mbOK ],1);

end; end;

 

procedureTShifCes.BbrowseClick(Sender: TObject);

var

 F, ToF: file;

gamma: file of byte;

G: byte;

NumRead, NumWritten: Integer;

Buf: Byte;

begin

Openfile.FilterIndex:=1;

randomize;

ifOpenFile.Execute then

begin

try

AssignFile(F, OpenFile.FileName);

ebrowse.Text:=Openfile.FileName;

Reset(F, 1);

AssignFile(ToF, OpenFile.FileName+'encrypt');

AssignFile(Gamma,OpenFile.FileName+'encrypt'+'crc');

Rewrite(Gamma);

Rewrite(ToF, 1);

repeat

g:=random(256);

BlockRead(F, Buf, SizeOf(Buf), NumRead);

Buf:=Bufxor g;

BlockWrite(ToF, Buf, NumRead, NumWritten);

Write(Gamma, g);

until (NumRead = 0) or (NumWritten<>NumRead);

CloseFile(F);

CloseFile(ToF);

CloseFIle(Gamma); Eresult.Caption:='Файлзашифрован';

except Eresult.Caption:='Файлнезашифрован';

end;

end; end;

 

procedureTShifCes.DeBrowseClick(Sender: TObject);

var

F,ToF: file;

gamma: file of byte;

G: byte;

NumRead, NumWritten: Integer;

Buf: Byte;

begin

Openfile.Title:='Расшифровкафайла';

Openfile.FilterIndex:=5;

try

ifOpenFile.Execute then

begin

 

AssignFile(F, OpenFile.FileName);

eDecr.Text:=Openfile.FileName;

Reset(F, 1);

AssignFile(ToF, OpenFile.FileName+'source'); { Open output file }

AssignFile(Gamma, OpenFile.FileName+'CRC');

reset(Gamma);

Rewrite(ToF, 1);

repeat

BlockRead(F, Buf, SizeOf(Buf), NumRead);

Read(Gamma, g);

Buf:=Bufxor g;

BlockWrite(ToF, Buf, NumRead, NumWritten);

until (NumRead = 0) or (NumWritten<>NumRead);

CloseFile(F);

CloseFile(ToF);

CloseFIle(Gamma); dresult.Caption:='Файлрасшифрован'; end;

except dresult.Caption:='Файлнерасшифрован'; end;

end;

procedureTShifCes.BexitClick(Sender: TObject);

begin

close;

end;

procedureTShifCes.BextClick(Sender: TObject);

begin

close ;

end;

procedure TShifCes.Button1Click(Sender: TObject);

varstr,k:string;

i,t:integer;

begin

str :=Edit1.Text;

k:=Edit2.Text;

try

for i := 1 to length(str) do

begin

T := (Ord(str[ i ])+ (Ord(K[(pred(i) mod length(K)) + 1]) - Ord('0')));

if T >= 256 then dec(T, 256);

str[ i ] := Chr(T);

memo1.Text:=str;

end;

exceptMessageDlg('Внимание! Вы не правильно ввели текст или смещение',mtWarning ,[mbOK ],1);

end;

end;

 

procedure TShifCes.Button2Click(Sender: TObject);

varstr,k:string;

i,t:integer;

begin

str:=memo1.Text;

k:=Edit2.Text;

try

for i := 1 to length(str) do

begin

T := (Ord(str[i])-(Ord(K[(pred(i) mod length(K)) + 1]) - Ord('0')) );

if T < 0 then Inc(T, 256);

str[ i ] := Chr(T);

memo2.Text:=str;

end;

exceptMessageDlg('Сначалазашифруйтетекст!!!',mtWarning  ,[mbOK ],1);

end;

end;

procedure TShifCes.Button3Click(Sender: TObject);

begin

close;

end;

 

procedureTShifCes.shifrClick(Sender: TObject);

var

i,j:integer;

begin

lencrypt.Caption:='Зашифрованныйтекст: ';

try

n:=strToInt(nmatrix.text);

m:=StrToInt(mmatrix.text);

SetLength(tabl, m,n);

str:=stext.text;

for i:=0 to n-1 do

for j:=0 to m-1 do

begin

if ((i)*n+j+1)> length(str) then

tabl[i,j]:=' '

else

tabl[i,j]:=str[(i)*n+j+1];

 

end;

for i:=0 to m-1 do

for j:=0 to n-1 do

t:=t+tabl[j,i];

lencrypt.Caption:= lencrypt.Caption+t;

except

MessageDlg('Внимание! Вы не правильно ввели текст или размерность массива',mtWarning ,[mbOK ],1);

end;

end;

 

 

procedureTShifCes.by_exitClick(Sender: TObject);

begin

close

end;

 

procedure TShifCes.Button4Click(Sender: TObject);

begin

ShellExecute(Handle, nil, '/cesar.exe', nil, nil, SW_SHOW);

end;

 

procedure TShifCes.Button5Click(Sender: TObject);

var

i,j:integer;

begin

t:='';

lll.Caption:='Расшифрованный текст: ';

for i:=0 to m-1 do

for j:=0 to n-1 do

t:=t+tabl[i,j];

lll.Caption:= lll.Caption+t;

 

end;

 

end.

 

 


Дата добавления: 2018-02-15; просмотров: 1936; Мы поможем в написании вашей работы!

Поделиться с друзьями:




Мы поможем в написании ваших работ!