#изображения #шифрование
Итак, хочется реализовать следующую идею: открываем изображение, считываем попиксельно, шифруем данные RGB пикселей неким текстовым ключом, составляем изображение попиксельно с измененными данными RGB. Финальное изображение (естественно бессмысленное с виду) в итоге может подвергаться небольшим изменением размера или подвергаться появлению артефактов сжатия JPEG в разумных пределах. Из чего я делаю вывод, что никакие блочные алгоритмы шифрования данных в этом случае не подойдут, а шифрование независимо каждого пикселя будет слишком слабым. Есть идеи? Update. Если не касаться проблемы изменения размеров, то получается красиво: Исходное → зашифрованное → дешифрованное Тут проблема в том, что шифрованное изображение подвергается сильным искажениям при изменении размеров, JPEG сжатии и прочим, так как по сути такого рода графическое изображение нужно хранить именно в битмапе (что делает этот подход не приемлимым в современных реалиях). Остаётся попробовать увеличивать шифрованное изображение раза в два три, чтобы каждый отдельный пиксель был площадью в 2 или 3 пикселя. А перед дефишровкой искать алгоритм наиболее удачного возвращения к исходным размерам.
Ответы
Ответ 1
В точности по вашему случаю: можно обойтись перемешиванием пикселей, или лучше усреднённых цветов областей размера width/N x height/N. Кодовое слово определяет алгоритм "обхода" поля картинки, так, чтобы за конечное число шагов покрыть все изображение, побывав в любом месте хотя бы раз (возможно несколько). И банально попарно менять области местами каждые два шага. Если слово будет определять алгоритм обхода "векторно" - без привязки к точным пикселям, то изменения размера картинки не должны сильно ухудшить результат расшифровки. Другие мысли: Надо суметь в изображении сохранять несколько "слоёв" данных: от крупных признаков, до мелких деталей. Тогда при изменении размера или ацкой компресии пропадут, скажем, совсем мелкие детали, но более крупные признаки и суть изображения останутся. Погуглите про частотное разложение изображений. Например, с двумя частотами, исходное раскладывается на два изображения такого же размера: исходная картинка сильно блюрится (уходят мелкие детали) - это низкочастотный канал. разница исходной и блюренной - серенькое изображение — содержит только мелкие детали. Сложив определенным образом эти два изображения, получается снова исходное, пиксель-в-пиксель. В ретуши так, например, можно легко избавиться от веснушек на коже, выделив их в отдельный частотный канал и замазав там в сплошной серый. Так вот, интуиция подсказывает, что: нужно раскладывать изображение по частотам и шифровать их отдельно == устойчивость к компрессии/уменьшению; шифрованное изображение должно содержать наложение нескольких слоев информации одновременно; размер признаков кореллирует с радиусом размытия данного слоя. Для Processing'а был такой пример эффекта "поинтилизма": в исходной картинке выбираются случайные квадратные области, блюрятся - берется усреднённый цвет, и в новой картинке рисуется полупрозрачный круг этого цвета, вписанный в тот квадрат. И они рисуются снова и снова, разных размеров. По мере роста числа этих вроде бы случайных кругов случайных цветов, начинает вырисовываться исходная картинка.Ответ 2
А если сохранить данные о цвете каждого пиксела в изображении, сделать его ч/б и подвергнуть его шифрованию. Данные о цвете сохранить в заголовке или в конце файла с изображением Посомотрите на этот пример, если владеете С++ link textОтвет 3
изображение запихать в base64, а base64 зашифровать в TrueCrypt или тому подобное (anubis там например). Или сразу напрямую шифровать, если такое возможно. Ну и в конце посмотреть в интернете, как умельцы к картинкам добавляли архивы. При всём этом нужно помнить, что большинство пикчехранилищ пересохраняют картинки.
Комментариев нет:
Отправить комментарий