Как скрыть 4 буквенно-цифровых символа в PNG, используя стеганографию в C?

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

Все, что я хочу, это скрыть / извлечь 4-буквенное сообщение (слово) в / из файла PNG. Эти 4 буквы никогда не изменятся. Это всегда будут одинаковые 4 буквы. Его цель - просто действовать как простой отпечаток пальца. Все примеры, которые я вижу, кажутся очень сложными и включают сжатие текстовых файлов и тому подобное.

Кто-нибудь знает какой-либо пример кода, который был написан, который имеет отношение к этому виду деятельности? Любой язык в порядке - мой в конечном итоге должен быть C или Obj-C.

1 ответ

Решение

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

Если предположить, что однопиксельный сдвиг в смежный цвет не будет заметен, вы можете сохранить в файле 4 буквы (20 бит), псевдослучайно назначая младший бит каждого красного, зеленого или синего компонента пикселя один из 20 бинов, а затем подсчитывает, имеет ли четное или нечетное количество компонентов пикселя в каждом бине набор LSB. Если четность ячейки не соответствует желаемому значению ячейки, выберите пиксельный компонент произвольно / случайным образом из числа назначенных этому ячейке и произвольно / случайно увеличьте или уменьшите его на единицу (если оно равно 0, вы должны увеличивать; если FF, уменьшать).

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

Другие вопросы по тегам