Разработка программы в среде Borland C++ Builder для шифрования текста на базе криптографических алгоритмов

Особенности разработки программного продукта для шифрования текста. Назначение и область применения данного продукта. Функциональные возможности и ключевые особенности C++ Builder. Структурное описание программы. Особенности использование шифра Цезаря.

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык русский
Дата добавления 09.04.2012
Размер файла 1004,3 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

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

Размещено на http://www.allbest.ru/

Содержание

Введение

1. Постановка задачи

2. Назначение и область применения данного продукта

3. Среда разработки

4. Особенности программирования в данной области

5. Структурное описание разработки

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

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

8. Шифр Цезаря

Заключение

Список используемой литературы

Приложение

Введение

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

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

Язык Simula, использовавшийся в 70-80-х годах в норвежских вооруженных силах, является одним из первых языков, основанных на понятии класс (класс -- подмножество, состоящее из данных и связанных с ними функций). Примерно в то же время был утвержден стандарт нового языка программирования, получивший название С (Си) и обладавший большой мощью, гибкостью и эффективностью. Достаточно сказать, что это был один из первых языков высокого уровня, позволявший работать с оборудованием, например, организовывать обмен данными между компьютерами.

В 1978 году были сделаны первые попытки объединить достоинства этих двух языков: так появился язык «Си с классами». Лишь спустя несколько лет он стал тем С++, который так широко применяется сегодня.

Проходит время, меняются требования и подходы к программированию, и в соответствии с этими требованиями меняется язык . Сейчас существует множество различных платформ и версий С++. Среди них можно выделить наиболее часто используемые Microsoft С++ (Dos,Windows) и Borland С++ Builder(Dos,Windows), Visual С++ (Windows), GNU С++ (Linux). В связи с этим можно говорить только о единстве ядра С++, в то время как интерфейс среды программирования и некоторые инструкции различаются для разных платформ и версий.

Бурное развитие вычислительной техники, потребность в эффективных средствах разработки программного обеспечения привели к появлению систем программирования, ориентированных на так называемую "быструю разработку". В основе систем быстрой разработки или RAD-систем (Rapid Application Development -- среда быстрой разработки приложений) лежит технология визуального проектирования и событийного программирования, суть которой заключается в том, что среда разработки берет на себя большую часть рутины, оставляя программисту работу по конструированию диалоговых окон и созданию функций обработки событий. Производительность программиста при использовании RAD-систем -- фантастическая! Одной из широко используемых RAD-систем является Borland C++Builder, которая позволяет создавать различные программы: от простейших однооконных приложений до программ управления распределенными базами данных. Одним из примеров программы написанной на Borland C++ Builder является учебный проект данной курсовой работы для шифрования текста на базе криптографических алгоритмов.

На протяжении многих веков человечество использовало криптографические методы для защиты информации при ее передаче и хранении. Приблизительно к концу XIX в. эти методы стали объектом математического изучения. К настоящему времени криптография содержит множество результатов (теорем, алгоритмов), как фундаментальных, так и прикладных. Занятие криптографией невозможно без серьезной математической подготовки. Отрасль математики, изучающая защиту информации, традиционно называется криптологией [cryptology] и подразделяется на криптографию [cryptography], занимающуюся разработкой новых методов и обоснованием их корректности, и криптоанализ [cryptanalysis], задача которого - интенсивное изучение существующих методов, часто с целью реального раскрытия секретов другой стороны. Криптография и криптоанализ находятся в тесном взаимодействии друг с другом и с практическими нуждами и развиваются параллельно закрытыми правительственными организациями многих государств и международным научным сообществом.

В настоящее время существуют тысячи криптографических систем, реализованных как программно, так и аппаратно. Среди них можно выделить системы, сам криптографический принцип работы которых держится в секрете, как, например, микросхема Clipper, предлагаемая правительством США в качестве криптографического стандарта для телекоммуникаций, и системы, алгоритм которых открыт, а секретной является только определенная, как правило небольшая, порция информации, называемая (секретным) ключом [(secret) key] - к ним относится большинство систем, реализуемых программно и предназначенных для широкого использования.

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

· объемы обрабатываемой информации возросли за полвека на несколько порядков;

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

· характер обрабатываемых данных стал чрезвычайно многообразным и более не сводится к исключительно текстовым данным;

· информация полностью "обезличилась", т.е. особенности ее материального представления потеряли свое значение - сравните письмо прошлого века и современное послание по электронной почте;

· характер информационных взаимодействий чрезвычайно усложнился, и наряду с классической задачей защиты передаваемых текстовых сообщений от несанкционированного прочтения и искажения возникли новые задачи сферы защиты информации, ранее стоявшие и решавшиеся в рамках используемых "бумажных" технологий - например, подпись под электронным документом и вручение электронного документа "под расписку" - речь о подобных "новых" задачах криптографии еще впереди;

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

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

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

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

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

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

Подведем итоги:

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

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

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

1. Постановка задачи

Рассмотреть существующие алгоритмы шифрования текста и выбрать наиболее интересные и стойкие. Имея навыки программирования на языке высокого уровня С++ разработать программный продукт для шифрования текста на основе этих алгоритмов.

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

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

2. Назначение и область применения данного продукта

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

3. Среда разработки

Курсовой проект был разработан в среде CodeGear C++ Builder 2007. Этот программный продукт является самым последним на сегодняшний день, выпущенным компанией Borland/CodeGear для разработки программного обеспечения на языке высокого уровня С++ под Windows. Мы, как разработчики выбрали данную среду потому, что она является интуитивно понятной и создание программ в этой среде, оказалось намного проще по сравнению с другими средами(Visual C++).

C++Builder 2007 - интегрированное средство RAD-разработки приложений на C++ для платформы Microsoft Windows.

Новая версия продукта C++ Builder 2007, представленная компанией Borland/CodeGear, сочетает поддержку операционной системы Windows Vista и технологий Web 2.0 с самыми последними стандартами: значительно выросшей производительностью, интегрированными функциями проверки и множеством сочетаний клавиш, позволяющих экономить время и значительно упрощать выполнение типовых задач.

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

Производительность продукта возросла в пять раз по сравнению с предыдущими версиями. Вниманию разработчиков будут предложены дополнительные возможности визуализации программного кода и интегрированные средства модульного тестирования кода на C++.

Функциональные возможности C++Builder 2007:

· Библиотека визуальных компонентов для веб-приложений VCL позволяет в визуальном режиме быстро создавать интерактивные, управляемые данными веб-страницы с поддержкой технологии AJAX.

· В визуальные объекты уже встроены технологии низкого уровня, благодаря чему не требуется знание HTML, JavaSprint, CSS или HTTP

· Новая архитектура DBX4 упрощает соединение с базами данных и поддерживает самые последние версии SQL.

· Библиотека сокетов на основе открытого кода, обновлена до набора интернет-протоколов Indy версии10.

· Встроенная поддержка технологии тестирования DUnit для C++ делает возможным стандартизированное тестирование элем6нтов и повышает стабильность приложений.

· Поддержка самых последних стандартов и улучшенная совместимость с ANSI C++ Dinkumware и библиотекой Boost.

· Разработка в Windows 2000, XP и Vista и развертывание в средах Windows 2000, XP и Vista.

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

· Создание правил сборки с возможностью многократного использования для согласования производительности на всех этапах проекта

· Визуализация исходного кода UML C++ позволяет упростить планирование и разработку приложений.

· Повышение производительности сборки, выполняемой в среде IDE, в 5 раз теперь также быстро или даже быстрее, чем сборка из командной строки.

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

· Визуальное представление кода с помощью представления стека вызовов и синхронизации между представлением стека вызова и представлением локальных переменных.

· Экономия времени благодаря организации файлов проектов в среде разработки с помощью виртуальных папок.

· Шаблоны Live Templates способствуют ускорению набора кода за счет его шаблонной вставки.

· Мастеры позволяют быстро создавать процедуры проверки элементов для существующих библиотек кодов.

· Для поддержки новой инфраструктуры базы данных не требуется перерабатывать имеющийся код.

Ключевые особенности:

· Быстрая Windows C++ разработка с поддержкой для Windows Vista, включая VCL поддержку для пользовательского интерфейса Aero, Vista Desktop, и API поддержку

· Разработка приложений на Windows 2000, XP, или Vista и в дальнейшем поддержка новой операционной системы

· VCL для Web позволит вам быстро строить интерактивные динамические корпоративные web-приложения, которые поддерживают AJAX технологии

· Увеличение ANSI C++ соответствия, включая новую библиотеку поддержки Dinkumware

· Экономия времени с расширенным механизмом отладки с новым пользовательским интерфейсом для более простого и быстрого использования

4. Особенности программирования в данной области

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

· Во-первых, хорошая защита информации обходится дорого. Плохая же защита никому не нужна, ибо наличие в ней лишь одной "дырки" означает полную бесполезность всей защиты в целом (принцип сплошной защиты). Поэтому прежде чем решать вопрос о защите информации, следует определить, стоит ли она того. Способен ли возможный ущерб от разглашения или потери информации превысить затраты на её защиту? С этой же целью надо максимально сузить круг защищаемой информации, чтобы не тратить лишних денег и времени.

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

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

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

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

5. Структурное описание разработки

Программа имеет следующую структуру

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

Главное окно программы выглядит следующим образом:

На главной форме расположено 5 кнопок:

1. Обзор - для выбора соответствующего файла

2. Зашифровать, при нажатии на которую появляется окно для ввода пароля

3. Расшифровать. Эта кнопка будет активной если выбран уже зашифрованный файл и при нажатии появится такое же окно для ввода пароля.

4. Настройки. Нажав на эту кнопку Вы попадаете в окно с настройками. Здесь можно выбрать соответствующий алгоритм шифрования.

5. Выход - для завершения работы приложения.

Программа работает с текстовыми файлами(*.txt) аскей кодировки. Зашифрованные файлы имеют расширение *.crp.

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

Основной алгоритм, который был применен в данной программе - это алгоритм Вижинера.

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

Система Вижинера подобна такой системе шифрования Цезаря, у которой ключ подстановки меняется от буквы к букве. Этот шифр многоалфавитной замены можно описать таблицей шифрования, называемой таблицей (квадратом) Вижинера. На рис.10 и 11 показаны таблицы Вижинера для русского и английского алфавитов соответственно.

Таблица Вижинера используется для зашифрования и расшифрования. Таблица имеет два входа:

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

* крайний левый столбец ключа.

Последовательность ключей обычно получают из числовых значений букв ключевого слова.

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

Рассмотрим пример получения шифртекста с помощью таблицы Вижинера. Пусть выбрано ключевое слово АМБРОЗИЯ. Необходимо зашифровать сообщение ПРИЛЕТАЮ СЕДЬМОГО.

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

Сообщение

 

П

Р

И

Л

Е

Т

А

Ю

 

 

С

Е

Д

Ь

М

О

Г

О

Ключ

 

А

М

Б

Р

О

З

И

Я

 

 

А

М

Б

Р

О

З

И

Я

Шифртекст

 

П

Ъ

Й

Ы

У

Щ

И

Э

 

 

С

С

Е

К

Ь

Х

Л

Н

Программно это алгоритм организован следующим образом. Весь процесс шифрования разбит на 4 функции.

В 1 функции символы введенного пароля, методом перебора, используя вложенный цикл, сравниваются с существующим в программе набором знаков - алфавитом. Если знак пароля и знак алфавита совпадают, то порядковый номер(цифра) символа алфавита помещается в отдельный целочисленный массив. Алфавит содержит все символы, расположенные на клавиатуре (включая пробел):

AnsiString alph = " ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyzАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдеёжзийклмнопрстуфхцчшщъыьэюя0123456789\\!%?/()-=$@.,:;_*#<>}{`~\"'№^&+";

Цикл организован в соответствии с типом строковых переменных AnsiString. Индексация AnsiString начинается не с 0, а с 1.

Во второй функции то же самое происходит с символами текстового файла. Также 2 цикла - основной и вложенный начинаются с 1, перебирают символы текстового файла и алфавита, и при обнаружении совпадающих символов порядковый номер символа текстового файла помещается в еще один отдельный целочисленный массив. Если все же символы не совпадают, то в текущий элемент целочисленного массива заносится значение 0. В последствие этот ноль будет распознан как переход на новую строку.

В 3 цикле происходит шифрование. Порядковый номер символа пароля складывается по модулю с порядковым номером символа текстового файла.

Сложение по модулю в данном случае означает, что если получившаяся сумма превышает общее количество символов в алфавите, то от этой суммы отнимается сумма символов в алфавите (например, если в алфавите 33 буквы, а складываются символы с номером 33 и 32, то получается 65 - 33).

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

И наконец в 4 функции цифры обратно превращаются в буквы по средствам того же перебора. В этой функции как раз реализовано обнаружение перехода на новую строку.

Расшифровка происходит также в 4 этапа. Различия лишь на 3 этапе. Там происходит вычитание по модулю и это организовано в отдельной функции. шифрование текст программный

8. Шифр Цезаря

Второй алгоритм, использованный в программе - шифр Цезаря. Шифр Цемзаря -- один из древнейших шифров. Историческим примером шифра замены является шифр Цезаря (1 век до н.э.), описанный историком Древнего Рима Светонием. Гай Юлий Цезарь использовал в своей переписке шифр собственного изобретения. Применительно к современному русскому языку он состоял в следующем. Выписывался алфавит: А, Б, В, Г, Д, Е,...,; затем под ним выписывался тот же алфавит, но со сдвигом на 3 буквы влево:

При зашифровке буква А заменялась буквой Г Б заменялась на Д, Б-Ей так далее. Так, например, слово "РИМ" превращалось в слово "УЛП". Получатель сообщения "УЛП" искал эти буквы в нижней строке и по буквам над ними восстанавливал исходное слово "РИМ". Ключом в шифре Цезаря является величина сдвига 3-й нижней строки алфавита. Преемник Юлия Цезаря - Цезарь Август - использовал тот же шифр, но с ключом - сдвиг 4. Слово "РИМ" он в этом случае зашифровал бы в буквосочетание "ФМР.

Таким образом, получается

А

Б

В

Г

Д

Е

Е

Ж

З

И

Й

К

Л

М

Н

О

П

Р

С

Т

У

Ф

Х

Ц

Ч

Ш

Щ

Ы

Ь

Ъ

Э

Ю

Я

Г

Д

Е

Е

Ж

3

И

И

К

Л

М

Н

О

П

Р

С

Т

У

Ф

Х

Ц

Ч

Ш

Щ

Ы

Ь

Ъ

Э

Ю

Я

А

Б

В

Заключение

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

При написании программы мы освоили новую среду разработки CodeGear C++ Builder 2007, и эта среда нам очень понравилась своей простотой.

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

Список используемой литературы

1. С++ Builder 6. СПРАВОЧНОЕ ПОСОБИЕ. А.Я. Архангельский. Москва ЗАО «Издательство БИНОМ» 2002. 544 с.

2. C++ Builder в задачах и примерах. Культин Н. Б. БХВ - Петербург, 2005. -- 336 с.

3. Введение в криптографию. М.Г. Адигеев. Ростов-на-Дону. 2002 г. 73 с.

4. http://cbuilder.ru/

5. http://www.klgtu.ru/ru/students/literature/inf_asu/130.html

6. http://crypto-r.narod.ru/glava2/glava2_4.html#4_2

7. www.codegear.com

Приложение

void passtonumfunc(AnsiString &pass, int &pass_l, int *passtonum);

//объявление ф-ции для перевода символов пароля в цифры

void file_texttonumfunc(int *file_texttonum, AnsiString &text_file);

//для перевода символов текстового файла в цифры

void encodefunc(int &text_l, int *file_texttonum, int *passtonum, int *crypt_num);

//объявление функции шифрования

void decodefunc(int &text_l, int *file_texttonum, int *passtonum, int *crypt_num);

//объявление функции для расшифрования

void numtotextfunc (int &text_l, int *crypt_num, char *out_text);

//перевод цифр в текст

AnsiString alph = " ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyzАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдеёжзийклмнопрстуфхцчшщъыьэюя0123456789\\!%?/()-=$@.,:;_*#<>}{`~\"'№^&+";

//алфавит, используемый в программе

AnsiString file_name = "";

//имя файла

AnsiString text_file = "";

//текст в файле

AnsiString pass = "";

//пароль

AnsiString curdir = "";

//текущая директория

AnsiString check_name = "";

//проверка имени (расширения)

int alph_l = alph.Length();

//длина алфавита

int text_l = 0;

//длина текста в файле

int pass_l = 0;

//длина пароля

int *passtonum;

//массив, хранящий порядковые номера символов пароля

int *file_texttonum;

// массив, хранящий порядковые номера символов текстового файла

int *crypt_num;

// номера символов расшифрованного/зашифрованного текста

int k = 0;

TStringList *sl = new TStringList;

//используется для открытия тестового файла

//функция вызывает диалоговое окно для выбора файла

bool ShowOpenDialog(HWND HWndOwner, char *FileName, char *Title,

char *InitialDir, char *Filter)

{

OPENFILENAME ofn;

ZeroMemory(&ofn, sizeof(OPENFILENAME));

char szFile[MAX_PATH];

ZeroMemory(szFile, MAX_PATH);

// инициализация OPENFILENAME

ofn.lStructSize = sizeof(OPENFILENAME);

ofn.hwndOwner = HWndOwner;

ofn.lpstrFile = szFile;

ofn.nMaxFile = MAX_PATH;

ofn.lpstrFilter = Filter;

ofn.nFilterIndex = 0;

ofn.lpstrTitle = Title;

ofn.lpstrInitialDir = InitialDir;

ofn.Flags = OFN_EXPLORER | OFN_FILEMUSTEXIST | OFN_HIDEREADONLY;

// Отображаем окно Open dialog.

if (GetOpenFileName(&ofn))

{

strcpy(FileName, ofn.lpstrFile);

return true;

}

return false;

}

void __fastcall TForm1::BitBtn1Click(TObject *Sender)

{

char FileName[MAX_PATH];

if (ShowOpenDialog(Handle,

FileName, // Сюда заносим имя выбранного файла

"Open file", // Заголовок окна

NULL,

"Текстовый или зашифрованный файл(*.txt,*.crp)\0*.txt;*.crp\0")) // Создаем фильтр диалога

{

Edit1->Text = FileName;

}

file_name = FileName; //присваивает имя файла

int file_name_l = file_name.Length();//определяет длину имени файла(+путь)

char *rash = new char[4];//хранит расширение файла

k = 0;

//первую букву расширения присваивает rash

for (int i = file_name_l - 2; i <= file_name_l; i++) {

rash[k] = file_name[i];

k++;

}

//блокирует возможность зашифровать уже зашифрованный файл

if (rash[0] == 'c') { //если выбран зашифрованный файл

Encrypt->Enabled = false; //кнопка зашифровать недоступна

Decrypt->Enabled = true; //доступна кнопка расшифровать

}

else if (rash[0] == 't') { //если выбран текстовый файл

Decrypt->Enabled = false; //кнопка расшифровать недоступна

Encrypt->Enabled = true; //кнопка зашифровать доступна

}

}

//нажатие кнопки зашифровать

void __fastcall TForm1::EncryptClick(TObject *Sender)

{

if(file_name > 0){//если файл выбран

sl->LoadFromFile(file_name);//функция открытия файла

text_file = sl->Text;

Form2->ShowModal();//вызов модального окна для ввода пароля

}

else //иначе появляется окно сообщения

MessageBox(NULL,"Выберите файл нажав на кнопку Обзор","Ошибка",MB_ICONERROR);

text_l = text_file.Length();//длина текста в файле

char *out_text;

out_text = new char[text_l];

//создается динамический массив, дина равна длине текста в файле

crypt_num = new int[text_l];

file_texttonum = new int[text_l];

if(Form2->ok_press){//если нажата кнопка Ok

pass = Form2->pass; //берем пароль из Form2

pass_l = pass.Length(); //определяем длину пароля

passtonum = new int[pass_l]; //инициализация массива

passtonumfunc(pass, pass_l, passtonum);

//вызов ф-ции для перевода символов пароля в цифры

file_texttonumfunc(file_texttonum, text_file);

// вызов ф-ции для перевода символов текстового файла

encodefunc (text_l, file_texttonum, passtonum, crypt_num);

// вызов функции шифрования

numtotextfunc (text_l, crypt_num, out_text);

//вызов функции для перевода цифр в текст

//сохранение файла

sl->Text = out_text;

if(sl->Text > 0 && pass > 0) {

sl->SaveToFile(file_name + ".crp");

MessageBox(NULL,"Текст зашифрован и сохранен в файл",\

"Операция успешно завершена",MB_ICONASTERISK);

}

}

//удаление указателей

delete file_texttonum;

delete passtonum;

}

//расшифрование файла

void __fastcall TForm1::DecryptClick(TObject *Sender)

{

if(file_name > 0){

sl->LoadFromFile(file_name);

text_file = sl->Text;

Form2->ShowModal();

}

else

MessageBox(NULL,"Выберите файл нажав на кнопку Обзор","Ошибка",MB_ICONERROR);

text_l = text_file.Length();

char *out_text;

out_text = new char[text_l];

crypt_num = new int[text_l];

file_texttonum = new int[text_l];

if(Form2->ok_press){

pass = Form2->pass;

pass_l = pass.Length();

passtonum = new int[pass_l];

passtonumfunc(pass, pass_l, passtonum);

file_texttonumfunc(file_texttonum, text_file);

decodefunc (text_l, file_texttonum, passtonum, crypt_num);

numtotextfunc (text_l, crypt_num, out_text);

int file_name_l = file_name.Length();

if(FindFirst(file_name.SetLength(file_name_l - 4),faAnyFile,sr) == 0)

{

Form4->Edit1->Text = file_name;

}

if(file_name > 0 && pass > 0){

sl->Text = out_text;

sl->SaveToFile(file_name.SetLength(file_name_l-4));

MessageBox(NULL,"Текст расшифрован и сохранен в файл",\

"Операция успешно завершена",MB_ICONASTERISK);

}

}

delete file_texttonum;

delete passtonum;

// delete lst;

}

void passtonumfunc(AnsiString &pass, int &pass_l, int *passtonum){

for(int i = 1;i<=pass_l;){

for(int j = 1;;){

if(pass[i] == alph[j]){

passtonum[i-1] = j;

j = 1;

i++;

}

else j++;

if (i>pass_l) break;

}

}

}

void file_texttonumfunc(int *file_texttonum, AnsiString &text_file){

for(int i = 1;i<=text_l;){

for(int j = 1;;){

if(text_file[i] == alph[j]){

file_texttonum[i-1] = j;

j=1;

i++;}

else if (j>=alph_l) {

file_texttonum[i-1] = 0;

j = 1;

i++;

}

else j++;

if (i>text_l) break;

}

}

}

void encodefunc ( int &text_l, int *file_texttonum, int *passtonum, int *crypt_num){

k = 0;

int a, b, c;

for(int i = 0;i<text_l;i++){

a = file_texttonum[i];

b = passtonum[k];

if (a != 0){

c = a + b;

}

else c = 0;

if(c > alph_l)

c -= alph_l;

crypt_num[i] = c;

k++;

if(k>=pass_l)

k = 0;

}

}

void decodefunc ( int &text_l, int *file_texttonum, int *passtonum, int *crypt_num){

k = 0;

int a, b, c;

for(int i = 0;i<text_l;i++){

a = file_texttonum[i];

b = passtonum[k];

if (a != 0){

c = a - b;

}

else c = 0;

if(c < 0)

c += alph_l;

crypt_num[i] = c;

k++;

if(k>=pass_l)

k = 0;

}

}

void numtotextfunc (int &text_l, int *crypt_num, char *out_text){

k = 0;

for(int i = 1;i<=text_l;){

for(int j = 1;;){

if(crypt_num[i-1] == 0 && k == 0) {

out_text[i-1] = '\r';

k++;

j = 1;

i++;}

if(crypt_num[i-1] == 0 && k == 1) {

out_text[i-1] = '\n';

k = 0;

j = 1;

i++;}

if(crypt_num[i-1] == j) {

out_text[i-1] = alph[j];

j = 1;

i++;}

else j++;

if(j>alph_l){

out_text[i] = '*';

j = 1;

i++;}

if (i>text_l) break;

}

}

}

//---------------------------------------------------------------------------

void __fastcall TForm1::ExitClick(TObject *Sender)

{

Form1->Close();

}

//---------------------------------------------------------------------------

void __fastcall TForm1::SettingsClick(TObject *Sender)

{

Form3->ShowModal();

}

//---------------------------------------------------------------------------

Размещено на Allbest.ru


Подобные документы

  • История появления и развития шифрования текста. Проблема шифрования и дешифрования текстовых сообщений в современности. Создание программы для зашифровки и расшифровки вводимого текста пятью методами: Атбаш, Цезаря, Полибия, Гронсфельда и Винжера.

    курсовая работа [923,6 K], добавлен 26.12.2011

  • Разработка программного продукта (лабиринт с входом и выходом, состоящий из комнат) в среде разработки Borland C++ Builder 6. Требования пользователя к программному изделию. Программные ограничения, совместимость. Основные процессы разработки программы.

    курсовая работа [819,9 K], добавлен 14.01.2013

  • Проблема скрытия и защиты информации от несанкционированного использования. История создания шифра. Решения задачи шифрования текста и кодирования данных. Тестирование полученного приложения и анализ работы программы с точки зрения пользователя.

    курсовая работа [3,0 M], добавлен 24.11.2013

  • Разработка программы, реализующей процедуры шифрования и расшифрования текста по стандарту DES (Data Encryption Standard). Структура алгоритма шифрования, схема выработки ключевых элементов. Использование криптографического программного средства.

    курсовая работа [1,7 M], добавлен 15.06.2013

  • Работа в Borland C++ Builder. Среда разработки и компоненты C++ Builder. Свойства компонентов. Менеджер проектов. Создание приложений в C++ Builder. Выбор компонентов для групповых операций. Работа с базами данных в Borland C++ Builder.

    курсовая работа [35,8 K], добавлен 11.06.2007

  • Создание приложения для шифрования–дешифрования текста тремя алгоритмами (алгоритм "Цезаря","Модифицированного Цезаря", "Скитала"). Исходный текст компонента. Инструкция пользователя, возможность просмотра примерного алгоритма. Исходный текст программы.

    курсовая работа [2,8 M], добавлен 27.02.2015

  • Основные программы, функционирующие в среде Windows и поддерживающие диалоговые окна и другие возможности. Разработка программы на языке Builder C++ 6.0, осуществляющей выдачу сообщения в заданное время. Описание ее алгоритмов. Общие сведения о IBM PC.

    курсовая работа [49,1 K], добавлен 13.11.2009

  • Схема работы и требования к программам шифрования и дешифрования. Алгоритмы и тексты программы шифрования и программы дешифрования, выполненные на языке программирования C/C++. Содержание файла с исходным текстом, с шифротекстом, с дешифрованным текстом.

    курсовая работа [24,7 K], добавлен 20.10.2014

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

    курсовая работа [45,0 K], добавлен 13.11.2009

  • Анализ криптографических методов шифрования данных. Разработка криптосистемы, основанной на схеме Эль-Гамаля. Определение функциональных и нефункциональных требований. Выбор языка программирования и среды разработки. Тестирование программного продукта.

    дипломная работа [1,6 M], добавлен 17.07.2016

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.