Как отображать или просматривать зашифрованные данные в зашифрованном виде?

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

НезашифрованоРежим CBC Режим CBC

В университете я разработал собственную реализацию DES (вы можете найти ее здесь), и мы должны продемонстрировать нашу реализация в презентации.

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

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

Любая помощь будет оценена по достоинству,

Спасибо

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


person Brian Gianforcaro    schedule 02.05.2010    source источник


Ответы (2)


Если вы используете язык высокого уровня, такой как Java, Python и т. д., вы можете загрузить изображение и прочитать данные о пикселях в массив в памяти. Затем выполните шифрование этих необработанных байтов, а затем сохраните изображение, когда закончите. Пусть все данные заголовков обрабатываются библиотеками того языка, который вы используете. Другими словами, не рассматривайте файл как необработанную последовательность байтов. Надеюсь, это поможет.

person YGL    schedule 02.05.2010
comment
Да, я обдумал это. Мы разработали его на C++, и мы действительно не должны использовать какие-либо внешние библиотеки. Также наша программа должна быть универсальной для шифрования любого файла. Спасибо за ответ. - person Brian Gianforcaro; 03.05.2010
comment
@ Брайан, загружать и сохранять 32-битные (без палитры) растровые файлы очень просто. Вам не нужна сторонняя библиотека. - person Nick Dandoulakis; 03.05.2010
comment
Похоже, вам нужны только файлы изображений для вашей презентации, так что вы можете просто использовать модифицированную одноразовую версию вашего инструмента шифрования для их создания, верно? - person caf; 03.05.2010
comment
Если бы я собирался это сделать, это лучший ответ, на мой взгляд. - person Brian Gianforcaro; 04.05.2010

Просто отрежьте заголовки перед шифрованием (сохраните их где-нибудь). Затем зашифруйте только остальное. Затем добавьте заголовки перед результатом.

Это особенно легко сделать с форматом Netpbm, потому что вам нужно только знать, сколько строк нужно отрезать. Данные хранятся в виде десятичных чисел, поэтому вам, вероятно, следует учитывать это при шифровании (сначала преобразовать их в двоичные).

person Chris Lercher    schedule 02.05.2010
comment
Это будет работать только для некоторых форматов изображений, которые хранят значения простых пикселей (возможно, BMP, TGA или PPM, а не GIF, PNG, JPEG) — и даже в этом случае следует учитывать, сколько байтов на пиксель/строку, и как это связаны с размером блока кодера. В противном случае результаты будут бессмысленными - person leonbloy; 03.05.2010
comment
@leonboy: Правда, я обновлял свой ответ, пока вы писали комментарий. - person Chris Lercher; 03.05.2010