Введение.
Введение. Некоторое время назад, когда я учился в университете, я работал над темой «Программные методы защиты информации». Требуется создать программу для включения сообщений в GIF-файлы. Я решил написать его на Java.


В этой статье описаны некоторые теоретические моменты и то, как создать эту небольшую программу.
Теоретическая часть.
Формат GIF
GIF — это форма хранения графических изображений, которая может хранить сжатые данные с количеством цветов до 256 без потери качества. Форма была разработана компанией Compuserve в 1987 году (GIF87A) и передавала растровые изображения по сети. В 1989 году MORPH был модифицирован (GIF89A) для поддержки прозрачности и анимации.
Файлы GIF имеют блочную структуру. Эти блоки всегда имеют фиксированную длину (или зависят от флагов), что делает практически невозможным ошибиться в том, какой блок какой. Простая неподвижная структура изображения GIF89A в формате GIF:.
Из всех блоков структуры в данном случае нас интересует блок глобальной палитры и параметры палитры.
- CT — перед глобальной палитрой. Если этот флаг активен, то общая палитра должна начинаться сразу после логического дескриптора экрана.
- Размер — размер палитры изображения и количество цветов. Значение этого параметра:.
Размер. | Количество цветов. | Размер палитры, байты |
---|---|---|
7 | 256 | 768 |
6 | 128 | 384 |
5 | 64 | 192 |
4 | 32 | 96 |
3 | 16 | 48 |
2 | 8 | 24 |
1 | 4 | 12 |
0 | 2 | 6 |
Метод шифрования.
Метод, используемый для шифрования сообщений в файлах изображений, заключается в следующем
- Метод LSB (наименьший значащий бит)
- Метод завершения палитры
Метод LSB является распространенным методом кэширования. Он заключается в замене последнего старшего бита в контейнере (в данном случае, байта общей палитры) на бит из скрытого сообщения.
В этом методе программа использует последние два бита байта мировой палитры. Это означает, что в случае 24-битного изображения, где цвета палитры состоят из трех байт красного, синего и зеленого, каждый цветовой элемент после включения сообщения изменится на градиент 3/255. Это изменение, во-первых, незаметно или трудно различимо человеческим глазом, а во-вторых, не будет отличаться на устройствах вывода более низкого качества.
Количество информации напрямую связано с размером палитры изображения. Максимальный размер палитры составляет 256 цветов, и если для каждого цветового элемента записывается два сообщения, максимальная длина сообщения (максимальная палитра изображения) составляет 192 байта. После включения сообщений в изображение размер файла не изменяется.
Метод расширения палитры, который работает только для структур GIF. Он более эффективен при использовании небольших палитровых изображений. По его мнению, он увеличивает размер палитры, предоставляя дополнительное пространство для записи байтов, необходимых для расположения цветов. Учитывая, что минимальный размер палитры составляет два цвета (6 байт), максимальный размер встроенного сообщения может составлять 256 x 3-6 = 762 байта. Недостатком является низкий уровень криптовалюты. Если сообщения не добавлены, вы можете прочитать встроенные сообщения в программе обработки текстов.
Практика
Разработка программы.
Пакет включает зашифрованный интерфейс с методами для шифрования и расшифровки, класс битового и неаббревиатурного криптоисключения и UnabletodeCryptexception, позволяющий использовать битовое и неаббревиатурное криптоисключение, используемое в методах зашифрованного интерфейса, в случае шифрования и расшифровки. Содержит бинарные классы.
Основная программа com.tsarik.programmes.gifed содержит программу start со статическим методом main, который может выполнять классы, хранящие параметры программы и пакеты других классов.
Реализация самого алгоритма представлена в пакете com.tsarik.programmes.gifed.gif классами gifencryptorbylsbmethod и gifencryptorbypaletteexionnsionmethod. Оба этих класса реализуют зашифрованный интерфейс.
Исходя из структуры формата GIF, может возникнуть общий алгоритм интеграции сообщения в палитру изображения.
Чтобы проверить, находится ли сообщение в картинке, необходимо добавить немного к началу сообщения. Он считывается первым и контролирует его точность. Если совпадений нет, значит, в фотографии не скрыто никакого сообщения. Далее необходимо указать длину сообщения. Далее — текст самого сообщения.
Класс класса для всего приложения:.


Применение программы
Реализация в масштабах всего приложения делится на две части компоненты.
Рассмотрим класс gifencryptorbylsbmethod.
Поля FirstLlsbit и Secondlsbit содержат номер бита каждого байта изображения, который необходимо считать после записи сообщения. Поле CheckSequence хранит последовательность контрольных битов и обеспечивает идентификацию встроенного сообщения. Статический метод getRyptingFileParameters возвращает параметры и потенциальные особенности сообщения указанного файла.
gifencryptorbylsbmethod Алгоритм метода шифрования:.
Алгоритм и исходный код для метода расшифровки класса gifencryptorbylsbmethod:.
Реализация класса gifencryptorbypaletteexionsionmethod аналогична, отличаясь только методом хранения/чтения.
Класс mainframe содержит методы encryptimage (шифрование) и decryptimage (расшифровка), которые обрабатывают результаты методов интерфейса шифровальщика и взаимодействуют с пользователем, т.е. открывают диалоги выбора файлов, выводят сообщения об ошибках Методы дешифровки, включая методы дешифровки (криптор-шифровальщик). Другие методы: openImage (), который позволяет пользователю выбрать изображение и exit (), который завершает работу приложения. Эти методы вызываются действием соответствующего элемента меню. В этом классе вспомогательные методы: createcomponents () — формируют компоненты, загружают изображение из файла в специальный компонент для создания roadimageFile (файл f). Реализация класса gifencryptorbypaletteexionsionmethod аналогична реализации класса gifencryptorbylsbmethod, с основным отличием записи и чтения байтов палитры.
Как работает программа
LBS Метод.
Предположим, у вас есть картинка:.
На этом изображении палитра состоит из 256 цветов (таким образом, краска вмещает их). Первые четыре цвета — белый, черный, красный и зеленый. Остальные цвета — черные. Последовательность битов палитры в мире следующая
11111111 1111111111 1111111111 00000000 00000000 00000000 1111111111 00000000 00000000 00000000 1111111111 00000000…
После включения сообщения подчеркнутые биты заменяются битами сообщения. Полученное изображение практически неотличимо от оригинала.
Инициалы. | Изображение, на основе которого было создано сообщение. Сообщение |
---|---|
![]() |
Использование метода расширения палитры
При открытии изображения с сообщением, встроенным в этот метод, отображается следующее изображение
Понятно, что этот метод не может работать для полноценного шпионажа и может потребовать дополнительного шифрования сообщения.
Шифрование/дешифрование движущихся изображений работает как обычное статическое изображение, и движение не нарушается.

