Как можно скрыть информацию в jpg или gif фотографии?

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

Создайте 2 файла (в одной директории) следующим образом:

parent.html


=>
No data yet.    

popup.html


22
задан Mehrdad Afshari 1 August 2009 в 08:29
поделиться

3 ответа

Вы можете хранить некоторую информацию в метаданных изображения. Фактически, именно так цифровые камеры «помечают» фотографии, которые они делают (модель камеры, дата и время, координаты GPS и т. Д.).

Этот формат данных называется EXIF ​​ (формат файла сменного изображения). Примеров использования в языках программирования очень много. Вот пример на Java.

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

3
ответ дан 29 November 2019 в 03:22
поделиться

Вы можете объединить gif и zip (информацию, которую вы хотите скрыть) в один файл. Гифки читаются с начала файла, а zip-архивы - с конца файла.

Чтобы создать такой файл в Linux:

$ cat file1.gif >> outfile.gif
$ cat file2.zip >> outfile.gif

Результирующий файл должен иметь размер file1.gif и file2.zip вместе и должны открываться любой программой просмотра gif и обработчиком zip-файлов.

47
ответ дан 29 November 2019 в 03:22
поделиться

Я уверен, что есть много способов. Вот один из них:

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

Возьмем простой пример. Предположим, у вас есть полутоновое изображение GIF, в котором палитра расположена в порядке от белого до черного с плавным диапазоном оттенков серого между ними. Я не уверен, что вы знаете о форматах графических файлов, но в GIF у вас есть один байт на пиксель, и каждое возможное значение байта отображается на определенный цвет. Итак, в этом случае мы могли бы сказать палитра # 0 = RGB (0,0,0), палитра # 1 = RGB (1,1,1), ... палитра # 255 = RGB (255,255,255).

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

Например, предположим, что первые восемь пикселей исходной фотографии, скажем, 01 00 C9 FF FF C8 42 43. Ваше сообщение начинается с буквы «C», код ASCII 0110 0111. Таким образом, вы измените последний бит первый байт на 0, изменение байта с 01 на 00. Вы меняете последний бит второго байта на 1, изменяя байт с 00 на 01. Вы меняете последний бит третьего байта на 1. Это уже 1, так что это не имеет значения. И т. Д. В итоге получается, что закодированные 8 байтов будут 00 01 C9 FE FF C9 43 43.

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

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

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

28
ответ дан 29 November 2019 в 03:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: