Есть ли адекватный способ расшифровать текст, зашифрованный в картинку?
2 года назад я баловался со скриптом шифрования текста в изображение. Недавно обнаружил изображение, в котором зашифрован текст, но рядом не было "ключей" для расшифровки.
Мне интересно, можно ли как-то расшифровать текст из этого изображения?
Алгоритм шифрования:
Текст для зашифровки в картинку предварительно шифруется при помощи библиотеки
cryptography(Python).Для каждого символа из текста выбирается случайный неповторяющийся пиксель изображения, а затем код его красного оттенка заменяется на ASCII-код символа.
- Пример: Символ
'x'имеет код120. Случайно выбранный пиксель имеет следующие параметры —R=50, G=155, B=70. После шифрования пиксель перезапишется с новыми параметрами —R=120, G=155, B=70
- Пример: Символ
После того, как все символы текста были зашифрованы в пиксели изображения, сохраняется картинка и рядом с ней файл с координатами измененных пикселей, разумеется, в правильном для символов текста порядке, чтобы текст потом можно было обратно расшифровать через
cryptography
Так как я использовал замену только красного оттенка, а не популярный метод LSB, измененная картинка имеет характерные "пятна", так как не у всех пикселей красный оттенок является главным, а замена сильно изменяет цвет.
Проблема:
Изображение с зашифрованным текстом есть, а вот файла с ключами-координатами измененных пикселей нет. Однако рядом лежало также оригинальное изображение. Попиксельно сверив эти картинки, я получил все измененные пиксели. А далее проблема — этих пикселей ~500 штук и для расшифровки текста нужно выставить их в правильном порядке — иначе в cryptography просто не подойдет ключ для расшифровки
Очевидная идея решения:
Подставим в формулу размещения без повторений значения:
Где нижнее 500 — число пикселей, а верхнее 500 — это длина одного размещения. По формуле получаем, что есть вот столько возможных комбинаций зашифрованных символов, из которых только одна будет верной и расшифруется в текст.
Думаю, очевидно, что ни один комп мне такой перебор не обработает.
А есть ли другой способ узнать, какая комбинация верна? "Случайность" выбора пикселя была реализована через встроенную функцию random.randint. Может быть есть какой-то способ узнать ключ генератора и воспроизвести этот случайный выбор? (Возможно написал бред, к сожалению, не до конца разобрался в этой теме)
