Я пишу программу шифрования изображений, в которой я кодирую строку внутри изображения.
Я работаю с .png
изображениями.
Кодирование выполняется следующими шагами:
- Пиксели изображения сохраняются в 2D-массиве с помощью getRGB().
- Каждый символ в строке преобразуется в двоичную форму и сохраняется в массиве.
- LSB каждого байта
4byte
пикселя изменяется в соответствии с каждым битом двоичной формы символа. LSB первого байта находится на 0-й позиции, LSB второго байта — на 8-й позиции, третий байт — на 16-й позиции, а четвертый байт — на 24-й позиции. - После кодирования измененные пиксели записываются в исходное изображение с помощью метода setRGB().
Для расшифровки:
- Считайте пиксели изображения с помощью getRGB();
- Для извлечения данных применяется обратный метод кодирования.
После каждого 8-го бита int, содержащий декодированные биты, преобразуется в символ. Затем инициализируется нулем для другого символа.
if((pixels[i][j] & change)==1) { tempText|=1 ; } tempText<<=1;
Где изменение составляет 1 256 65536 16777216 в зависимости от итерации. Чьи 0-й, 8-й, 16-й и 24-й биты являются одним.
Код компилируется нормально. Но после декодирования я получаю на выходе странные символы ascii. Я не мог найти причину этого. Поэтому я консультируюсь здесь со специалистами.