Определение конца JPEG (при объединении с другим файлом) - PullRequest
2 голосов
/ 03 февраля 2011

Я создаю программу, которая «скрывает» зашифрованный файл в конце JPEG.Проблема заключается в том, что при повторном получении этого зашифрованного файла мне необходимо определить, когда заканчивается файл JPEG, в котором он был сохранен.Сначала я подумал, что это не будет проблемой, потому что я могу просто запустить проверку файлов на 0xFF и 0xD9, байты, которые JPEG использует для завершения изображения.Однако ... Я замечаю, что во многих JPEG-файлах эта комбинация байтов не исключительна ... Так что моя программа считает, что изображение закончилось случайным образом на полпути.

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

Ответы [ 4 ]

1 голос
/ 03 февраля 2011

Вы должны прочитать спецификации формата файла JFIF

0 голосов
/ 26 января 2018

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

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

0 голосов
/ 04 февраля 2011

Вы должны прочитать мой ответ на этот вопрос " Определить Eof для изображений JPG ".

0 голосов
/ 03 февраля 2011

Ну, в файле всегда есть два места, которые вы можете найти со 100% надежностью. Начало и конец. Поэтому, когда вы добавляете скрытый файл, добавьте еще один 4 байта, в котором хранится исходная длина файла и специальная сигнатура, которая всегда различна. Читая его обратно, сначала ищите до конца - 8 и прочитайте эту длину и подпись. Тогда просто стремитесь к этой позиции.

...