Как вставить файл в изображение? iOS iPhone - PullRequest
0 голосов
/ 03 июля 2011

В магазине приложений есть приложение под названием «Активная фотография» (http://itunes.apple.com/us/app/active-photo/id366798464?mt=8)), которое позволяет встроить скрытое изображение или файл .exe в изображение. Я хотел бы знать, как выполнить это обновление, добавив изображения к изображениям,Отчасти как субизображения в исходном изображении.

Я искал метаданные, но ни один тег не кажется достаточно большим, чтобы содержать представление NSData для второго изображения.

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

Спасибо.

Ответы [ 2 ]

2 голосов
/ 03 июля 2011

Это известно как стеганография .

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

0 голосов
/ 10 июля 2015

Я не думаю, что это возможно с JPEG, потому что это сжатие с потерями, поэтому вы в конечном итоге повредите встроенный файл.Но PNG использует метод сжатия, аналогичный Deflate, который без потерь.

Я начал писать такую ​​программу.Идея заключалась в том, чтобы скрыть байты данных, разбивая их на цветовые каналы наименее значимых бит пикселей.Позвольте мне сделать несколько примеров.

Изображение RGB-8 представляет пиксель с 3 байтами, один для красного, один для зеленого и один для синего.Я храню 3 бита в красном канале, два в зеленом (человеческий глаз более чувствителен к зеленому цвету) и 3 в синем.Поэтому я вставляю один байт на пиксель.Аналогично с изображением RGBA-8 я делаю 2-2-2-2.Это, конечно, включает в себя некоторые побитовые операции.

Все становится более интересным с изображениями RGB (A) -16, где на канал приходится два байта.Я использую весь младший байт каждого канала с минимальным искажением (наихудший случай 255/65535 = ~ 3,9%) и храню до 3 или 4 байта данных на пиксель.Неплохо!!Более того, в этом случае нет сложных побитовых операций, одно назначение выполняет свою работу.

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

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

Как вы можете видеть, вы можете многое сделать с изображениями PNG!Если вам интересно, я могу дать код, который я написал до сих пор.

...