Исследование стеганографических алгоритмов защиты информации

Классическое, компьютерное и цифровое направления стенографии. Использование зарезервированных полей компьютерных форматов файлов. Алгоритмы встраивания скрытой информации. Стеганография и цифровые водяные знаки. Документация программного продукта.

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

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

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

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

Курсовая работа

на тему:

Исследование стеганографических алгоритмов защиты информации

Введение

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

Выходом из этой ситуация является использование стеганографии.

Стеганография - (от греческого скрытый, буквально «тайнопись») - это наука о скрытой передаче информации путём сохранения в тайне самого факта передачи.

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

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

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

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

1. Анализ алгоритмов стегонаграфической защиты информации

1.1 Терминология

В 1996 году на конференции Information Hiding: First Information Workshop была принята единая терминология:

- Стеганографическая система (стегосистема) - объединение методов и средств используемых для создания скрытого канала для передачи информации. При построении такой системы условились о том, что:

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

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

3) Противник не имеет технических и прочих преимуществ.

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

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

- Стеганографический канал (стегоканал) - канал передачи стегоконтейнера.

- Ключ (стегоключ) - секретный ключ, нужный для сокрытия стегоконтейнера. Ключи в стегосистемах бывают двух типов: секретные и открытые. Если стегосистема использует секретный ключ, то он должен быть создан или до начала обмена сообщениями, или передан по защищённому каналу. Стегосистема, использующая открытый ключ, должна быть устроена таким образом, чтобы было невозможно получить из него закрытый ключ. В этом случае открытый ключ мы можем передавать по незащищённому каналу.

1.2 Направления стеганографии

В конце 90-х годов выделилось несколько направлений стеганографии:

- классическая стеганография;

- компьютерная стеганография;

- цифровая стеганография.

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

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

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

Одним из наиболее распространенных методов классической стеганографии является использование симпатических (невидимых) чернил. Текст, записанный такими чернилами, проявляется только при определенных условиях (нагрев, освещение, химический проявитель и т. д.) Изобретенные еще в I веке н. э. Филоном Александрийским, они продолжали использоваться как в средневековье, так и в новейшее время, например, в письмах русских революционеров из тюрем. В советской школьной программе в курсе литературы изучался рассказ о том, как Владимир Ленин писал молоком на бумаге между строк. Молоко проявлялось при нагреве над пламенем.

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

Во время Второй мировой войны активно использовались микроточки - микроскопические фотоснимки, вклеиваемые в текст писем, телеграмм.

Также существует ряд альтернативных методов сокрытия информации:

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

- запись внутри вареного яйца;

- «жаргонные шифры», где слова имеют другое обусловленное значение;

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

- узелки на нитках и т. д.

1.3 Компьютерная стеганография

Компьютерная стеганография - направление классической стеганографии, основанное на особенностях компьютерной платформы.

Примеры - стеганографическая файловая система StegFS для Linux, скрытие данных в неиспользуемых областях форматов файлов, подмена символов в названиях файлов, текстовая стеганография и т. д.

Приведём некоторые примеры:

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

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

- Метод использования особых свойств полей форматов, которые не отображаются на экране - этот метод основан на специальных «невидимых» полях для получения сносок, указателей. К примеру, написание черным шрифтом на черном фоне. Недостатки: маленькая производительность, небольшой объём передаваемой информации.

- Использование особенностей файловых систем - при хранении на жестком диске файл всегда (не считая некоторых ФС, например, ReiserFS) занимает целое число кластеров (минимальных адресуемых объемов информации). К примеру, в ранее широко используемой файловой системе FAT32 (использовалась в Windows98/Me/2000) стандартный размер кластера - 4 Кб. Соответственно для хранения 1 Кб информации на диске выделяется 4 Кб информации, из которых 1Кб нужен для хранения сохраняемого файла, а остальные 3 ни на что не используются - соответственно их можно использовать для хранения информации. Недостаток данного метода: лёгкость обнаружения.

1.4 Цифровая стеганография

Цифровая стеганография - направление классической стеганографии, основанное на сокрытии или внедрении дополнительной информации в цифровые объекты, вызывая при этом некоторые искажения этих объектов. Но, как правило, данные объекты являются мультимедиа-объектами (изображения, видео, аудио, текстуры 3D-объектов) и внесение искажений, которые находятся ниже порога чувствительности среднестатистического человека, не приводит к заметным изменениям этих объектов. Кроме того, в оцифрованных объектах, изначально имеющих аналоговую природу, всегда присутствует шум квантования; далее, при воспроизведении этих объектов появляется дополнительный аналоговый шум и нелинейные искажения аппаратуры, все это способствует большей незаметности сокрытой информации.

Из рамок цифровой стеганографии вышло наиболее востребованное легальное направление - встраивание цифровых водяных знаков (ЦВЗ) (watermarking), являющееся основой для систем защиты авторских прав и DRM (Digital rights management) систем. Методы этого направления настроены на встраивание скрытых маркеров, устойчивых к различным преобразованиям контейнера (атакам).

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

Например, разработки Digimarc в виде плагинов к редактору Adobe Photoshop позволяют встроить в само изображение информацию об авторе. Однако такая метка неустойчива, впрочем как и абсолютное их большинство. Программа Stirmark, разработчиком которой является ученый Fabien Petitcolas, с успехом атакует подобные системы, разрушая стеговложения.

Все алгоритмы встраивания скрытой информации можно разделить на несколько подгрупп:

- Работающие с самим цифровым сигналом. Например, метод LSB.

- «Впаивание» скрытой информации. В данном случае происходит наложение скрываемого изображения (звука, иногда текста) поверх оригинала. Часто используется для встраивания ЦВЗ.

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

По способу встраивания информации стегоалгоритмы можно разделить на линейные (аддитивные), нелинейные и другие. Алгоритмы аддитивного внедрения информации заключаются в линейной модификации исходного изображения, а ее извлечение в декодере производится корреляционными методами. При этом ЦВЗ обычно складывается с изображением-контейнером, либо «вплавляется» (fusion) в него. В нелинейных методах встраивания информации используется скалярное либо векторное квантование. Среди других методов определенный интерес представляют методы, использующие идеи фрактального кодирования изображений. К аддитивным алгоритмам можно отнести:

- А17 (Cox)

- А18 (Barni)

- L18D (Lange)

- А21 (J. Kim).

- А25 (С. Podilchuk).

Метод LSB

LSB (Least Significant Bit, наименьший значащий бит) - суть этого метода заключается в замене последних значащих битов в контейнере (изображения, аудио или видеозаписи) на биты скрываемого сообщения. Разница между пустым и заполненным контейнерами должна быть не ощутима для органов восприятия человека.

Суть метода заключается в следующем: Допустим, имеется 8-битное изображение в градациях серого. 00h (00000000b) обозначает черный цвет, FFh (11111111b) - белый. Всего имеется 256 градаций (28). Также предположим, что сообщение состоит из 1 байта - например, 01101011b. При использовании 2 младших бит в описаниях пикселей, нам потребуется 4 пикселя. Допустим, они черного цвета. Тогда пиксели, содержащие скрытое сообщение, будут выглядеть следующим образом: 00000001 0000001000000010 00000011. Тогда цвет пикселей изменится: первого - на 1/255, второго и третьего - на 2/255 и четвертого - на 3/255. Такие градации, мало того что незаметны для человека, могут вообще не отобразиться при использовании низкокачественных устройств вывода.

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

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

Все методы LSB являются, как правило, аддитивными (A17, L18D).

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

Эхо-методы

Эхо-методы применяются в цифровой аудиостеганографии и используют неравномерные промежутки между эхо-сигналами для кодирования последовательности значений. При наложении ряда ограничений соблюдается условие незаметности для человеческого восприятия. Эхо характеризуется тремя параметрами: начальной амплитудой, степенью затухания, задержкой. При достижении некоего порога между сигналом и эхом они смешиваются. В этой точке человеческое ухо не может уже отличить эти два сигнала. Наличие этой точки сложно определить, и она зависит от качества исходной записи, слушателя. Чаще всего используется задержка около 1/1000, что вполне приемлемо для большинства записей и слушателей. Для обозначения логического нуля и единицы используется две различных задержки. Они обе должны быть меньше, чем порог чувствительности уха слушателя к получаемому эху.

Эхо-методы устойчивы к амплитудным и частотным атакам, но неустойчивы к атакам по времени.

Фазовое кодирование

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

Метод расширенного спектра

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

1.5 Стеганография и цифровые водяные знаки

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

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

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

Перед помещением ЦВЗ в контейнер, водяной знак нужно преобразовать к подходящему виду. К примеру, если в качестве контейнера используется изображение, то и ЦВЗ должны быть представлена как двумерный битовый массив.

Для повышения устойчивости к искажениям часто применяют помехоустойчивое кодирование или используют широкополосные сигналы. Начальную обработку скрытого сообщения делает прекодер. Важная предварительная обработка ЦВЗ - вычисление его обобщенного Фурье-преобразования. Это повышает помехоустойчивость. Первичную обработку часто производят с использованием ключа - для повышения секретности. Потом водяной знак «укладывается» в контейнер (например, путем изменения младших значащих бит). Здесь используются особенности восприятия изображений человеком. Широко известно, что изображения имеют огромную психовизуальную избыточность. Глаза человека подобны низкочастотному фильтру, который пропускает мелкие элементы изображения. Наименее заметны искажения в высокочастотной области изображений. Внедрение ЦВЗ также должно учитывать свойства восприятия человека.

Во многих стегосистемах для записи и считывания ЦВЗ используется ключ. Он может предназначаться для ограниченного круга пользователей или же быть секретным. Например, ключ нужен в DVD-плейерах для возможности прочтения ими содержащихся на дисках ЦВЗ. Как известно, не существует таких стегосистем, в которых бы при считывании водяного знака требовалась другая информация, нежели при его записи. В стегодетекторе происходит обнаружение ЦВЗ в защищённом им файле, который, возможно, мог быть изменён. Эти изменения могут быть связаны с воздействиями ошибок в канале связи, либо преднамеренными помехами. В большинстве моделей стегосистем сигнал-контейнер можно рассмотреть как аддитивный шум. При этом задача обнаружения и считывания стегосообщения уже не представляет сложности, но не учитывает двух факторов: неслучайности сигнала контейнера и запросов по сохранению его качества. Учет этих параметров позволит строить более качественные стегосистемы. Для обнаружения факта существования водяного знака и его считывания используются специальные устройства - стегодетекторы. Для вынесения решения о наличии или отсутствии водяного знака используют, к примеру, расстояние по Хэммингу, взаимокорреляцию между полученным сигналом и его оригиналом. В случае отсутствия исходного сигнала в дело вступают более изощренные статистические методы, которые основаны на построении моделей исследуемого класса сигналов.

1.6 Сводная характеристика методов стеганографической защиты

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

1) Методы, основанные на использовании специальных свойств компьютерных форматов;

2) Методы, основанные на избыточности аудио и визуальной информации.

Таблица 1.1 - Сравнительные характеристики стеганографических методов.

Стеганографические методы

Краткая характеристика методов

Недостатки

Преимущества

1. Методы использования специальных свойств компьютерных форматов данных

1.1. Методы использования зарезервированных для расширения полей компьютерных форматов данных

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

Низкая степень скрытности, передача небольших ограниченных объемов информации

Простота использования

1.2. Методы специального форматирования текстовых файлов:

1.2.1. Методы использования известного смещения слов, предложений, абзацев

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

1. Слабая производи-тельность метода, передача небольших объемов информации 2. Низкая степень скрытности

Простота использования. Имеется опубликованное программное обеспечение реализации данного метода

1.2.2. Методы выбора определенных позиций букв (нулевой шифр)

Акростих - частный случай этого метода (например, начальные буквы каждой строки образуют сообщение)

1. Слабая производи-тельность метода, передача небольших объемов информации 2. Низкая степень скрытности

Простота использования. Имеется опубликованное программное обеспечение реализации данного метода

1.2.3. Методы использования специальных свойств полей форматов, не отображаемых на экране

Методы основаны на использовании специальных "невидимых", скрытых полей для организации сносок и ссылок (например, использование черного шрифта на черном фоне)

1.3. Методы скрытия в неиспользуемых местах гибких дисков

Информация записывается в обычно неиспользуемых местах ГМД (например, в нулевой дорожке)

1. Слабая производительность метода, передача небольших объемов информации

2. Низкая степень скрытности

Простота использования.

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

1.4. Методы использования имитирующих функций (mimic-function)

Метод основан на генерации текстов и является обобщением акростиха. Для тайного сообщения генерируется осмысленный текст, скрывающий само сообщение

1. Слабая производительность метода, передача небольших объемов информации

2. Низкая степень скрытности

Результирующий текст не является подозрительным для систем мониторинга сети

1.5. Методы удаления идентифицирующего файл заголовка

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

Проблема скрытия решается только частично. Необходимо заранее передать часть информации получателю

Простота реализации. Многие средства (White Noise Storm, S-Tools), обеспечивают реализацию этого метода

2. Методы использования избыточности аудио и визуальной информации

2.1. Методы использования избыточности цифровых фотографии, цифрового звука и цифрового видео

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

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

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

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

Цифровые фотографии, цифровая музыка, цифровое видео - представляются матрицами чисел, которые кодируют интенсивность в дискретные моменты в пространстве и/или во времени.

Цифровая фотография - это матрица чисел, представляющих интенсивность света в определенный момент времени.

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

Графические цветные файлы со схемой смешения RGB кодируют каждую точку рисунка тремя байтами. Каждая такая точка состоит из аддитивных составляющих: красного, зеленого, синего. Изменение каждого из трех наименее значимых бит приводит к изменению менее 1% интенсивности данной точки. Это позволяет скрывать в стандартной графической картинке объемом 800 Кбайт около 100 Кбайт информации, что не заметно при просмотре изображения.

Другой пример. Только одна секунда оцифрованного звука с частотой дискретизации 44100 Гц и уровнем отсчета 8 бит в стерео режиме позволяет скрыть за счет замены наименее значимых младших разрядов на скрываемое сообщение около 10 Кбайт информации. При этом изменение значений отсчетов составляет менее 1%. Такое изменение практически не обнаруживается при прослушивании файла большинством людей.

2. Реализация алгоритма стеганографической защиты

2.1 Особенности реализации алгоритма

Для реализации выберем два алгоритма стеганографической - первый алгоритм LSB, а второй - алгоритм, основанный на использовании резервных полей.

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

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

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

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

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

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

2.2 Рабочая документация программного продукта

Разработанная программа реализует алгоритм LSB и алгоритм использования резервных полей.

Системные требования

Системные требования:

- Тип ЭВМ: IBM PC-совместимые ПК.

- ОС: Windows 9X/NT/2000/XP/Vista/Windows 7.

- Размер ОЗУ: 64 Mб

- Размер видео памяти: 32 Mб

- Свободное место на HDD: 2 Мб

- Процессор Pentium III 1ГГц и выше.

Установка программы не требуется - для начала работы с программой необходимо запустить файл Stego.exe.

Заключение

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

Написанная программа реализует стеганографические алгоритмы, которые позволяют срыть сам факт передачи информации, хотя информация передаётся в открытом виде.

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

- Работающие с самим цифровым сигналом. Например, метод LSB, который был реализован в программе.

- «Впаивание» скрытой информации. В данном случае происходит наложение скрываемого изображения (звука, иногда текста) поверх оригинала. Часто используется для встраивания ЦВЗ.

- Использование особенностей форматов файлов.

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

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

1. Конахович Г. Ф., Пузыренко А. Ю. Компьютерная стеганография. Теория и практика. -- К.: МК-Пресс, 2006. -- 288 с

2. Быков С. Ф. Алгоритм сжатия JPEG с позиции компьютерной стеганографии Защита информации. Конфидент. -- СПб.: 2000, № 3

3. Грибунин В. Г., Оков И. Н., Туринцев И. В. Цифровая стеганография. -- М.: Солон-Пресс, 2002. -- 272 с

4. Schneier B (1996) Applied Cryptography. John Wiley and Sons, Indianapolis, IN

5. Chandramouli, R. and N. Memon, 2001. Analysis of LSB based image steganography techniques. Proc. of ICIP, Thessaloniki, Greece.

6. Dumitrescu, S., W. Xiaolin and Z. Wang, 2003. Detection of LSB steganography via sample pair analysis. In: LNCS, Vol. 2578, Springer-Verlag, New York, pp: 355-372.

7. Juan Jose Roque, Jesus Maria Minguet. SLSB: Improving the Steganographic Algorithm LSB, Universidad Nacional de Educacion a Distancia (Spain)

8. С. Панасенко, "Алгоритмы шифрования". - СПб.: 2009.

9. Жельников В. Кpиптогpафия от папиpуса до компьютеpа. -- М.: ABF, 1996. -- 335 с.

10. David Kahn The Codebreakers -- The Story of Secret Writing. -- New York: Charles Scribner's Sons, 1967. -- 473 с

Приложение 1

object frmIzoInfo: TfrmIzoInfo

Left = 0

Top = 0

Caption = #1057#1087#1088#1103#1090#1072#1090#1100' '#1089#1086#1086#1073#1097#1077#1085#1080#1077' '#1074' '#1080#1085#1092#1086#1088#1084#1072#1094#1080#1080' '#1082' '#1092#1072#1081#1083#1091

ClientHeight = 206

ClientWidth = 473

Color = clBtnFace

Font.Charset = DEFAULT_CHARSET

Font.Color = clWindowText

Font.Height = -11

Font.Name = 'Tahoma'

Font.Style = []

OldCreateOrder = False

Position = poDesktopCenter

OnCreate = FormCreate

OnShow = FormShow

PixelsPerInch = 96

TextHeight = 13

object Label1: TLabel

Left = 8

Top = 44

Width = 200

Height = 21

Caption = #1057#1086#1086#1073#1097#1077#1085#1080#1077' '#1076#1083#1103' '#1089#1086#1082#1088#1099#1090#1080#1103':'

Font.Charset = ANSI_CHARSET

Font.Color = clWindowText

Font.Height = -16

Font.Name = 'Palatino Linotype'

Font.Style = [fsBold, fsItalic]

ParentFont = False

end

object Label2: TLabel

Left = 8

Top = 1

Width = 107

Height = 21

Caption = #1055#1091#1090#1100' '#1082' '#1092#1072#1081#1083#1091

Font.Charset = RUSSIAN_CHARSET

Font.Color = clWindowText

Font.Height = -16

Font.Name = 'Palatino Linotype'

Font.Style = [fsBold, fsItalic]

ParentFont = False

end

object edIsxodDir: TEdit

Left = 8

Top = 24

Width = 441

Height = 21

TabOrder = 0

end

object bbOpenIsxod: TBitBtn

Left = 444

Top = 24

Width = 21

Height = 21

DoubleBuffered = True

Glyph.Data = {

42020000424D4202000000000000420000002800000010000000100000000100

10000300000000020000202E0000202E00000000000000000000007C0000E003

00001F000000FF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FBB7BFF7FFF7F

FF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7F977FA76E42666A318E2D

D65AFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FBC7FED76A0764062606A60450000

00008C31BD77FF7FFF7FFF7FFF7FDE7F307BA376806EE176A26A235A227F2031

000000003967FF7FFF7FFF7F557BC676A072C076E276E276A26E0356037B6066

85141142FF7FFF7F787BEA76A076E076027B027BE276E27AA26E435EA36AA072

136FFF7FFF7FDD7FA476A076E276027B027B027BE276027BC272425E8462C076

A56ABD7BFF7FDD7FC376E076027B027B027B027B227F227F4266635E6356C36E

806ECF66FF7FDD7FC376C076027B027B027B227F027B826A43626362835EE372

C07A435EDE7BBC7BC376C076E276027B227FC2724366445EA366C26E027BE27A

E27A606AAD66BC7FC372C076E276227FA26E235A8562A46AE276027BE276C276

027BA072255EBC7FC372A072027BC072025E465AA366027F017BA072A072E172

606A65667977BC7FC376C072806E456A465E8362E276C076406AED72077B606A

AC6ABC7BFF7FDB7F80724066F06EDE7B4F7B8072606E64665673FF7FFD7F977B

FF7FFF7FFF7FFD7FED763673FF7FFF7FDC7F0D7BCD6EBC7BFF7FFF7FFF7FFF7F

FF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7F

FF7FFF7FFF7F}

ParentDoubleBuffered = False

TabOrder = 1

OnClick = bbOpenIsxodClick

end

object mmMessage: TMemo

Left = 8

Top = 68

Width = 458

Height = 89

Font.Charset = RUSSIAN_CHARSET

Font.Color = clWindowText

Font.Height = -13

Font.Name = 'Times New Roman'

Font.Style = []

ParentFont = False

ScrollBars = ssBoth

TabOrder = 2

end

object butStartStego: TButton

Left = 248

Top = 163

Width = 218

Height = 27

Caption = #1057#1087#1088#1103#1090#1072#1090#1100' '#1089#1086#1086#1073#1097#1077#1085#1080#1077

Font.Charset = RUSSIAN_CHARSET

Font.Color = clWindowText

Font.Height = -16

Font.Name = 'Palatino Linotype'

Font.Style = [fsBold, fsItalic]

ParentFont = False

TabOrder = 3

OnClick = butStartStegoClick

end

object diagOpenPict: TOpenPictureDialog

Filter = 'JPEG Image File (*.jpg)|*.jpg'

Left = 272

Top = 65528

end

end

unit unInfoIzo;

interface

uses

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

Dialogs, StdCtrls, ExtDlgs, Buttons, CCR.Exif.JPEGUtils, CCR.Exif;

Type стенография компьютерный скрытый информация

TfrmIzoInfo = class(TForm)

edIsxodDir: TEdit;

bbOpenIsxod: TBitBtn;

diagOpenPict: TOpenPictureDialog;

mmMessage: TMemo;

Label1: TLabel;

butStartStego: TButton;

Label2: TLabel;

procedure FormCreate(Sender: TObject);

procedure FormShow(Sender: TObject);

procedure bbOpenIsxodClick(Sender: TObject);

procedure butStartStegoClick(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

frmIzoInfo: TfrmIzoInfo;

implementation

{$R *.dfm}

procedure TfrmIzoInfo.bbOpenIsxodClick(Sender: TObject);

begin

diagOpenPict.FileName:='';

diagOpenPict.Execute();

if diagOpenPict.FileName<>'' then

edIsxodDir.Text:=diagOpenPict.FileName;

end;

procedure TfrmIzoInfo.butStartStegoClick(Sender: TObject);

var Jpeg_im: TJpegImageEx;

begin

if frmIzoInfo.Tag=0 then

begin

try

Jpeg_im:= TJpegImageEx.Create;

Jpeg_im.LoadFromFile(edIsxodDir.Text);

Jpeg_im.ExifData.Comments := mmMessage.Text;

Jpeg_im.SaveToFile(edIsxodDir.Text);

MessageBox(Application.Handle, 'Файл успешно перезаписан', 'Ok', MB_OK or MB_ICONINFORMATION);

finally

Jpeg_im.Free;

end;

end

else

try

Jpeg_im:= TJpegImageEx.Create;

Jpeg_im.LoadFromFile(edIsxodDir.Text);

mmMessage.Text:=Jpeg_im.ExifData.Comments;

finally

Jpeg_im.Free;

end;

end;

procedure TfrmIzoInfo.FormCreate(Sender: TObject);

begin

diagOpenPict.InitialDir:=ExtractFilePath(Application.ExeName);

end;

procedure TfrmIzoInfo.FormShow(Sender: TObject);

begin

mmMessage.Lines.Clear;

edIsxodDir.Text:='';

end;

end.

object frmIzo: TfrmIzo

Left = 0

Top = 0

BorderStyle = bsDialog

Caption = #1057#1087#1088#1103#1090#1072#1090#1100' '#1074' '#1080#1079#1086#1073#1088#1072#1078#1077#1085#1080#1080

ClientHeight = 439

ClientWidth = 473

Color = clBtnFace

Font.Charset = DEFAULT_CHARSET

Font.Color = clWindowText

Font.Height = -11

Font.Name = 'Tahoma'

Font.Style = []

OldCreateOrder = False

Position = poDesktopCenter

OnCreate = FormCreate

OnShow = FormShow

PixelsPerInch = 96

TextHeight = 13

object imIsxodIzo: TImage

Left = 8

Top = 35

Width = 200

Height = 200

Stretch = True

end

object imStegoIzo: TImage

Left = 264

Top = 35

Width = 200

Height = 200

Stretch = True

end

object Label1: TLabel

Left = 8

Top = 236

Width = 200

Height = 21

Caption = #1057#1086#1086#1073#1097#1077#1085#1080#1077' '#1076#1083#1103' '#1089#1086#1082#1088#1099#1090#1080#1103':'

Font.Charset = ANSI_CHARSET

Font.Color = clWindowText

Font.Height = -16

Font.Name = 'Palatino Linotype'

Font.Style = [fsBold, fsItalic]

ParentFont = False

end

object butSravn: TButton

Left = 248

Top = 386

Width = 218

Height = 47

Caption = #1055#1086#1082#1072#1079#1072#1090#1100' '#1080#1079#1086#1073#1088#1072#1078#1077#1085#1080#1103' '#1087#1088#1080' '#1088#1077#1072#1083#1100#1085#1086#1084' '#1084#1072#1089#1096#1090#1072#1073#1077

Font.Charset = RUSSIAN_CHARSET

Font.Color = clWindowText

Font.Height = -16

Font.Name = 'Palatino Linotype'

Font.Style = [fsBold, fsItalic]

ParentFont = False

TabOrder = 0

WordWrap = True

OnClick = butSravnClick

end

object mmMessage: TMemo

Left = 8

Top = 260

Width = 458

Height = 89

Font.Charset = RUSSIAN_CHARSET

Font.Color = clWindowText

Font.Height = -13

Font.Name = 'Times New Roman'

Font.Style = []

ParentFont = False

ScrollBars = ssBoth

TabOrder = 1

end

object butStartStego: TButton

Left = 248

Top = 355

Width = 218

Height = 27

Caption = #1057#1087#1088#1103#1090#1072#1090#1100' '#1089#1086#1086#1073#1097#1077#1085#1080#1077

Font.Charset = RUSSIAN_CHARSET

Font.Color = clWindowText

Font.Height = -16

Font.Name = 'Palatino Linotype'

Font.Style = [fsBold, fsItalic]

ParentFont = False

TabOrder = 2

OnClick = butStartStegoClick

end

object edIsxodDir: TEdit

Left = 8

Top = 8

Width = 185

Height = 21

TabOrder = 3

OnDblClick = edIsxodDirDblClick

end

object bbOpenIsxod: TBitBtn

Left = 192

Top = 8

Width = 21

Height = 21

DoubleBuffered = True

Glyph.Data = {

42020000424D4202000000000000420000002800000010000000100000000100

10000300000000020000202E0000202E00000000000000000000007C0000E003

00001F000000FF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FBB7BFF7FFF7F

FF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7F977FA76E42666A318E2D

D65AFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FBC7FED76A0764062606A60450000

00008C31BD77FF7FFF7FFF7FFF7FDE7F307BA376806EE176A26A235A227F2031

000000003967FF7FFF7FFF7F557BC676A072C076E276E276A26E0356037B6066

85141142FF7FFF7F787BEA76A076E076027B027BE276E27AA26E435EA36AA072

136FFF7FFF7FDD7FA476A076E276027B027B027BE276027BC272425E8462C076

A56ABD7BFF7FDD7FC376E076027B027B027B027B227F227F4266635E6356C36E

806ECF66FF7FDD7FC376C076027B027B027B227F027B826A43626362835EE372

C07A435EDE7BBC7BC376C076E276027B227FC2724366445EA366C26E027BE27A

E27A606AAD66BC7FC372C076E276227FA26E235A8562A46AE276027BE276C276

027BA072255EBC7FC372A072027BC072025E465AA366027F017BA072A072E172

606A65667977BC7FC376C072806E456A465E8362E276C076406AED72077B606A

AC6ABC7BFF7FDB7F80724066F06EDE7B4F7B8072606E64665673FF7FFD7F977B

FF7FFF7FFF7FFD7FED763673FF7FFF7FDC7F0D7BCD6EBC7BFF7FFF7FFF7FFF7F

FF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7F

FF7FFF7FFF7F}

ParentDoubleBuffered = False

TabOrder = 4

OnClick = bbOpenIsxodClick

end

object edStegoDir: TEdit

Left = 261

Top = 8

Width = 188

Height = 21

TabOrder = 5

OnDblClick = edStegoDirDblClick

end

object bbOpenStego: TBitBtn

Left = 445

Top = 8

Width = 21

Height = 21

DoubleBuffered = True

Glyph.Data = {

42020000424D4202000000000000420000002800000010000000100000000100

10000300000000020000202E0000202E00000000000000000000007C0000E003

00001F000000FF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FBB7BFF7FFF7F

FF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7F977FA76E42666A318E2D

D65AFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FBC7FED76A0764062606A60450000

00008C31BD77FF7FFF7FFF7FFF7FDE7F307BA376806EE176A26A235A227F2031

000000003967FF7FFF7FFF7F557BC676A072C076E276E276A26E0356037B6066

85141142FF7FFF7F787BEA76A076E076027B027BE276E27AA26E435EA36AA072

136FFF7FFF7FDD7FA476A076E276027B027B027BE276027BC272425E8462C076

A56ABD7BFF7FDD7FC376E076027B027B027B027B227F227F4266635E6356C36E

806ECF66FF7FDD7FC376C076027B027B027B227F027B826A43626362835EE372

C07A435EDE7BBC7BC376C076E276027B227FC2724366445EA366C26E027BE27A

E27A606AAD66BC7FC372C076E276227FA26E235A8562A46AE276027BE276C276

027BA072255EBC7FC372A072027BC072025E465AA366027F017BA072A072E172

606A65667977BC7FC376C072806E456A465E8362E276C076406AED72077B606A

AC6ABC7BFF7FDB7F80724066F06EDE7B4F7B8072606E64665673FF7FFD7F977B

FF7FFF7FFF7FFD7FED763673FF7FFF7FDC7F0D7BCD6EBC7BFF7FFF7FFF7FFF7F

FF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7F

FF7FFF7FFF7F}

ParentDoubleBuffered = False

TabOrder = 6

OnClick = bbOpenStegoClick

end

object diagOpenPict: TOpenPictureDialog

Filter =

'All (*.jpg;*.bmp)|*.jpg;*.bmp|JPEG Image File (*.jpg)|*.jpg|Bitm' +

'aps (*.bmp)|*.bmp'

Left = 224

Top = 8

end

object diagSavePict: TSavePictureDialog

DefaultExt = '.bmp'

Filter = 'Bitmaps (*.bmp)|*.bmp'

Left = 224

Top = 56

end

end

unit unIzo;

interface

uses

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

Dialogs, StdCtrls, ExtCtrls, Mask, Buttons, ExtDlgs, JPEG, unSravnenie;

type

TfrmIzo = class(TForm)

imIsxodIzo: TImage;

imStegoIzo: TImage;

butSravn: TButton;

Label1: TLabel;

mmMessage: TMemo;

butStartStego: TButton;

diagOpenPict: TOpenPictureDialog;

edIsxodDir: TEdit;

bbOpenIsxod: TBitBtn;

edStegoDir: TEdit;

bbOpenStego: TBitBtn;

diagSavePict: TSavePictureDialog;

procedure FormCreate(Sender: TObject);

procedure edIsxodDirDblClick(Sender: TObject);

procedure edStegoDirDblClick(Sender: TObject);

procedure bbOpenIsxodClick(Sender: TObject);

procedure bbOpenStegoClick(Sender: TObject);

procedure FormShow(Sender: TObject);

procedure butStartStegoClick(Sender: TObject);

procedure butSravnClick(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

frmIzo: TfrmIzo;

stego:boolean;

implementation

{$R *.dfm}

procedure TfrmIzo.bbOpenIsxodClick(Sender: TObject);

Var pict_jpg:TJPEGImage;

begin

diagOpenPict.FileName:='';

diagOpenPict.Execute();

if diagOpenPict.FileName<>'' then

begin

edIsxodDir.Text:=diagOpenPict.FileName;

if copy(diagOpenPict.FileName, length(diagOpenPict.FileName)-3,4)='.jpg' then

begin

pict_jpg:=TJPEGImage.Create;

pict_jpg.LoadFromFile(diagOpenPict.FileName);

imIsxodIzo.Picture.Assign(pict_jpg);

FreeAndNil(pict_jpg);

end

else

imIsxodIzo.Picture.LoadFromFile(diagOpenPict.FileName);

end;

end;

procedure TfrmIzo.bbOpenStegoClick(Sender: TObject);

begin

diagSavePict.FileName:='';

diagSavePict.Execute();

if diagSavePict.FileName<>'' then

edStegoDir.Text:=diagSavePict.FileName;

end;

procedure TfrmIzo.butSravnClick(Sender: TObject);

begin

if stego=false then exit;

frmSravnenie.imIsxod.Picture:=imIsxodIzo.Picture;

frmSravnenie.imStego.Picture:=imStegoIzo.Picture;

frmSravnenie.ShowModal;

end;

procedure TfrmIzo.butStartStegoClick(Sender: TObject);

Var i,j,l,ns,nb:integer;

pict_jpg:TJPEGImage;

pict_bmp:TBitmap;

sim_word:word;

//q:int64;

data:TStream;

begin

if edIsxodDir.Text='' then

begin

MessageBox(Application.Handle,'Не указан путь исходного изображения.', 'Error', MB_OK or MB_ICONERROR);

exit;

end;

if edStegoDir.Text='' then

begin

MessageBox(Application.Handle,'Не указан путь конечного изображения.', 'Error', MB_OK or MB_ICONERROR);

exit;

end;

//showmessage(copy(diagOpenPict.FileName, length(diagOpenPict.FileName)-3,4));

if copy(diagOpenPict.FileName, length(diagOpenPict.FileName)-3,4)='.jpg' then

begin

pict_jpg:=TJPEGImage.Create;

pict_jpg.LoadFromFile(diagOpenPict.FileName);

pict_bmp:=TBitmap.Create;

pict_bmp.Assign(pict_jpg);

FreeAndNil(pict_jpg);

end

else

begin

pict_bmp:=TBitmap.Create;

pict_bmp.LoadFromFile(diagOpenPict.FileName);

end;

{if pict_bmp.Width*pict_bmp.Height*sizeof(integer)<length(Text)*2 then

begin

MessageBox(Application.Handle,'Данное сообщение невозможно спрятать в этом изображении.', 'Error', MB_OK or MB_ICONERROR);

exit;

end;}

l:=0;

ns:=1;

nb:=0;

sim_word:=ord(mmMessage.Text[ns]);

//showmessage(IntToHex(sim_word,4));

data:=TMemoryStream.Create;

mmMessage.Lines.SaveToStream(data);

data.Seek(0,soFromBeginning);

data.Read(sim_word,2);

if (pict_bmp.Width*pict_bmp.Height-2)*sizeof(integer)<(data.Size+8) then

begin

MessageBox(Application.Handle,'Данное сообщение невозможно спрятать в этом изображении.', 'Error', MB_OK or MB_ICONERROR);

FreeAndNil(pict_bmp);

FreeAndNil(data);

exit;

end;

for i:=0 to pict_bmp.Width-1 do

begin

for j:=0 to pict_bmp.Height-1 do

begin

if (data.Position=data.Size)and(l mod 16=0) then break;

if (l mod 16=0)and(l<>0) then

begin

ns:=ns+1;

data.Read(sim_word,2);

nb:=0;

end;

//showmessage(inttostr(ord(mmMessage.Text[ns]))+' '+chr(ord(mmMessage.Text[ns])));

if (sim_word and (1 shl nb))<>0 then

pict_bmp.Canvas.Pixels[i,j]:=pict_bmp.Canvas.Pixels[i,j] or (1 shl 0)

else

pict_bmp.Canvas.Pixels[i,j]:=pict_bmp.Canvas.Pixels[i,j] and not (1 shl 0);

l:=l+1;

nb:=nb+1;

if (data.Position=data.Size)and(l mod 16=0) then break;

if (l mod 16=0)and(l<>0) then

begin

ns:=ns+1;

data.Read(sim_word,2);

nb:=0;

end;

if (sim_word and (1 shl nb))<>0 then

pict_bmp.Canvas.Pixels[i,j]:=pict_bmp.Canvas.Pixels[i,j] or (1 shl 1)

else

pict_bmp.Canvas.Pixels[i,j]:=pict_bmp.Canvas.Pixels[i,j] and not (1 shl 1);

l:=l+1;

nb:=nb+1;

if (data.Position=data.Size)and(l mod 16=0) then break;

if (l mod 16=0)and(l<>0) then

begin

ns:=ns+1;

data.Read(sim_word,2);

nb:=0;

end;

if (sim_word and (1 shl nb))<>0 then

pict_bmp.Canvas.Pixels[i,j]:=pict_bmp.Canvas.Pixels[i,j] or (1 shl 2)

else

pict_bmp.Canvas.Pixels[i,j]:=pict_bmp.Canvas.Pixels[i,j] and not (1 shl 2);

l:=l+1;

nb:=nb+1;

end;

end;

for i:=0 to 31 do

begin

if (data.Size and (1 shl i))<>0 then

pict_bmp.Canvas.Pixels[pict_bmp.Width-1,pict_bmp.Height-2]:=pict_bmp.Canvas.Pixels[pict_bmp.Width-1,pict_bmp.Height-2] or (1 shl i)

else

pict_bmp.Canvas.Pixels[pict_bmp.Width-1,pict_bmp.Height-2]:=pict_bmp.Canvas.Pixels[pict_bmp.Width-1,pict_bmp.Height-2] and not (1 shl i);

j:=i+32;

if (data.Size and (1 shl j))<>0 then

pict_bmp.Canvas.Pixels[pict_bmp.Width-1,pict_bmp.Height-1]:=pict_bmp.Canvas.Pixels[pict_bmp.Width-1,pict_bmp.Height-1] or (1 shl i)

else

pict_bmp.Canvas.Pixels[pict_bmp.Width-1,pict_bmp.Height-1]:=pict_bmp.Canvas.Pixels[pict_bmp.Width-1,pict_bmp.Height-1] and not (1 shl i);

end;

pict_bmp.SaveToFile(edStegoDir.Text);

imStegoIzo.Picture.Assign(pict_bmp);

FreeAndNil(pict_bmp);

FreeAndNil(data);

stego:=true;

end;

procedure TfrmIzo.edIsxodDirDblClick(Sender: TObject);

begin

bbOpenIsxod.Click;

end;

procedure TfrmIzo.edStegoDirDblClick(Sender: TObject);

begin

bbOpenStego.Click;

end;

procedure TfrmIzo.FormCreate(Sender: TObject);

begin

diagOpenPict.InitialDir:=ExtractFilePath(Application.ExeName);

diagSavePict.InitialDir:=ExtractFilePath(Application.ExeName);

//diredIsxod.

end;

procedure TfrmIzo.FormShow(Sender: TObject);

begin

imIsxodIzo.Picture.LoadFromFile(ExtractFilePath(Application.ExeName)+'Question.bmp');

imStegoIzo.Picture.LoadFromFile(ExtractFilePath(Application.ExeName)+'Question.bmp');

edIsxodDir.Text:='';

edStegoDir.Text:='';

mmMessage.Lines.Clear;

stego:=false;

end;

end.

object frmIzvlechMessage: TfrmIzvlechMessage

Left = 0

Top = 0

BorderStyle = bsDialog

Caption = #1048#1079#1074#1083#1077#1095#1100' '#1089#1086#1086#1073#1097#1077#1085#1080#1077' '#1080#1079' '#1080#1079#1086#1073#1088#1072#1078#1077#1085#1080#1103

ClientHeight = 388

ClientWidth = 428

Color = clBtnFace

Font.Charset = DEFAULT_CHARSET

Font.Color = clWindowText

Font.Height = -11

Font.Name = 'Tahoma'

Font.Style = []

OldCreateOrder = False

OnShow = FormShow

PixelsPerInch = 96

TextHeight = 13

object imIsxodIzo: TImage

Left = 8

Top = 35

Width = 402

Height = 200

Stretch = True

end

object Label1: TLabel

Left = 8

Top = 236

Width = 183

Height = 21

Caption = #1048#1079#1074#1083#1077#1095#1105#1085#1085#1086#1077' '#1089#1086#1086#1073#1097#1077#1085#1080#1077':'

Font.Charset = ANSI_CHARSET

Font.Color = clWindowText

Font.Height = -16

Font.Name = 'Palatino Linotype'

Font.Style = [fsBold, fsItalic]

ParentFont = False

end

object edIsxodDir: TEdit

Left = 8

Top = 8

Width = 385

Height = 21

TabOrder = 0

end

object mmMessage: TMemo

Left = 8

Top = 260

Width = 402

Height = 89

Font.Charset = RUSSIAN_CHARSET

Font.Color = clWindowText

Font.Height = -13

Font.Name = 'Times New Roman'

Font.Style = []

ParentFont = False

ScrollBars = ssBoth

TabOrder = 1

end

object butStartStego: TButton

Left = 266

Top = 355

Width = 154

Height = 27

Caption = #1048#1079#1074#1083#1077#1095#1100' '#1089#1086#1086#1073#1097#1077#1085#1080#1077

Font.Charset = RUSSIAN_CHARSET

Font.Color = clWindowText

Font.Height = -16

Font.Name = 'Palatino Linotype'

Font.Style = [fsBold, fsItalic]

ParentFont = False

TabOrder = 2

OnClick = butStartStegoClick

end

object bbOpenIsxod: TBitBtn

Left = 389

Top = 8

Width = 21

Height = 21

DoubleBuffered = True

Glyph.Data = {

42020000424D4202000000000000420000002800000010000000100000000100

10000300000000020000202E0000202E00000000000000000000007C0000E003

00001F000000FF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FBB7BFF7FFF7F

FF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7F977FA76E42666A318E2D

D65AFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FBC7FED76A0764062606A60450000

00008C31BD77FF7FFF7FFF7FFF7FDE7F307BA376806EE176A26A235A227F2031

000000003967FF7FFF7FFF7F557BC676A072C076E276E276A26E0356037B6066

85141142FF7FFF7F787BEA76A076E076027B027BE276E27AA26E435EA36AA072

136FFF7FFF7FDD7FA476A076E276027B027B027BE276027BC272425E8462C076

A56ABD7BFF7FDD7FC376E076027B027B027B027B227F227F4266635E6356C36E

806ECF66FF7FDD7FC376C076027B027B027B227F027B826A43626362835EE372

C07A435EDE7BBC7BC376C076E276027B227FC2724366445EA366C26E027BE27A

E27A606AAD66BC7FC372C076E276227FA26E235A8562A46AE276027BE276C276

027BA072255EBC7FC372A072027BC072025E465AA366027F017BA072A072E172

606A65667977BC7FC376C072806E456A465E8362E276C076406AED72077B606A

AC6ABC7BFF7FDB7F80724066F06EDE7B4F7B8072606E64665673FF7FFD7F977B

FF7FFF7FFF7FFD7FED763673FF7FFF7FDC7F0D7BCD6EBC7BFF7FFF7FFF7FFF7F

FF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7F

FF7FFF7FFF7F}

ParentDoubleBuffered = False

TabOrder = 3

OnClick = bbOpenIsxodClick

end

object diagOpenPict: TOpenPictureDialog

Filter = 'Bitmaps (*.bmp)|*.bmp'

Left = 208

Top = 232

end

end

unit unIzvlechMessage;

interface

uses

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

Dialogs, JPEG, ExtDlgs, ExtCtrls, Buttons, StdCtrls;

type

TfrmIzvlechMessage = class(TForm)

edIsxodDir: TEdit;

imIsxodIzo: TImage;

diagOpenPict: TOpenPictureDialog;

Label1: TLabel;

mmMessage: TMemo;

butStartStego: TButton;

bbOpenIsxod: TBitBtn;

procedure bbOpenIsxodClick(Sender: TObject);

procedure butStartStegoClick(Sender: TObject);

procedure FormShow(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

frmIzvlechMessage: TfrmIzvlechMessage;

implementation

{$R *.dfm}

procedure TfrmIzvlechMessage.bbOpenIsxodClick(Sender: TObject);

begin

diagOpenPict.FileName:='';

diagOpenPict.Execute();

if diagOpenPict.FileName<>'' then

begin

edIsxodDir.Text:=diagOpenPict.FileName;

imIsxodIzo.Picture.LoadFromFile(diagOpenPict.FileName);

end;

end;

procedure TfrmIzvlechMessage.butStartStegoClick(Sender: TObject);

Var i,j,nb:integer;

pict_bmp:TBitmap;

sim_b:word;

sizeofdata:int64;

data:TStream;

begin

if edIsxodDir.Text='' then

begin

MessageBox(Application.Handle,'Не указан путь исходного изображения.', 'Error', MB_OK or MB_ICONERROR);

exit;

end;

pict_bmp:=TBitmap.Create;

pict_bmp.LoadFromFile(diagOpenPict.FileName);

data:=TMemoryStream.Create;

data.Seek(0,soFromBeginning);

nb:=0;

sim_b:=0;

sizeofdata:=0;

for i:=0 to 31 do

begin

if (pict_bmp.Canvas.Pixels[pict_bmp.Width-1,pict_bmp.Height-2] and (1 shl i))<>0 then

sizeofdata:=sizeofdata or (1 shl i)

else

sizeofdata:=sizeofdata and not (1 shl i);

if (pict_bmp.Canvas.Pixels[pict_bmp.Width-1,pict_bmp.Height-1] and (1 shl i))<>0 then

sizeofdata:=sizeofdata or (1 shl (i+32))

else

sizeofdata:=sizeofdata and not (1 shl (i+32));

end;

for i:=0 to pict_bmp.Width do

for j:=0 to pict_bmp.Height do


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

  • Основные понятия и определения стеганографии. Методы сокрытия данных и сообщений, цифровые водяные знаки. Атаки на стегосистемы и методы их предупреждения. Технологии и алгоритмы стеганографии. Работа с S-Tools. Особенности специальной программы.

    контрольная работа [2,2 M], добавлен 21.09.2010

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

    курсовая работа [48,3 K], добавлен 29.01.2010

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

    контрольная работа [80,2 K], добавлен 02.01.2018

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

    курсовая работа [332,3 K], добавлен 26.11.2013

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

    курсовая работа [57,5 K], добавлен 30.03.2009

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

    дипломная работа [883,5 K], добавлен 12.08.2017

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

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

  • Способы и средства защиты информации от несанкционированного доступа. Особенности защиты информации в компьютерных сетях. Криптографическая защита и электронная цифровая подпись. Методы защиты информации от компьютерных вирусов и от хакерских атак.

    реферат [30,8 K], добавлен 23.10.2011

  • Понятие об информации. Информатика, краткая история информатики. Информация аналоговая и цифровая. Аналого-цифровое преобразование, устройства аналоговые и цифровые. Понятие о кодировании информации. Хранение цифровой информации. Бит.

    реферат [68,9 K], добавлен 23.11.2003

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

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

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