Запутывающие изображения - PullRequest
6 голосов
/ 10 апреля 2009

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

Вопрос: как мне сделать это на лету, не читая «испорченный» файл JPG, восстанавливая заголовок, сохраняя хороший файл на диск и затем повторно загружая его как «хороший» файл JPG?

Ответы [ 6 ]

16 голосов
/ 10 апреля 2009

Загрузите «поврежденный» файл в TMemoryStream , исправьте байты в памяти и используйте TGraphic.LoadFromStream () для загрузки исправленного файла JPG.

6 голосов
/ 11 апреля 2009

Зашифруйте их. Загрузите зашифрованное изображение, расшифруйте его в памяти, а затем выполните загрузку из потока, как предложил mghie.

4 голосов
/ 11 апреля 2009

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

2 голосов
/ 11 апреля 2009

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

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

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

1 голос
/ 11 апреля 2009

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

0 голосов
/ 12 апреля 2009

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

...