.BMP формат файла не является невероятно сложным (к счастью).
Учитывая, что вы работаете на таком низком уровне, я бы порекомендовал (если безопасность неогромная проблема) в том, что вы маскируете последний бит каждого пикселя ваших данных.Просто перепрыгните через заголовки данных непосредственно в данные изображения и начните заменять младший значащий бит каждого цвета RGB на следующий бит вашего встроенного сообщения.Имейте в виду, что в BMP-формате есть некоторые отступы, поэтому лучше сохранить счетчик количества байтов, которые вы уже маскировали в текущей строке, чтобы вы не влияли на отступы 0.Этот метод требует соотношения размеров данных 8/1.
Кроме того, вы можете использовать цикл Shift Logical Right в MIPS, чтобы определить целевой бит для встраивания в ваше изображение.Маскируйте каждую итерацию цикла с номером 1 and $bitToEmbed, $yourMessageByte, 1
, чтобы определить бит для встраивания и перейти к следующему байту после 8 итераций (8 бит на байт).
Одна операция маскирования может выглядеть так (Фактические имена регистровдолжен быть заменен, конечно):
and $bitToEmbed, $yourMessageByte, 1 #Get Target Bit to embed
and $RGBByte, $RGBByte, 254 #Mask the RGB Byte with 11111110
or $RGBByte, $bitToEmbed, $RGBByte #Embed your target bit.
Добавьте некоторую итерацию для прохождения одного целого байта сообщения:
#Jump Past Header...
#Create all temporary versions of your image and message...
#Begin data processing:
ITERBYTE:
and $bitToEmbed, $yourMessageByte, 1 #Get Target Bit to embed
and $RGBByte, $RGBByte, 254 #Mask the RGB Byte with 11111110
or $RGBByte, $bitToEmbed, $RGBByte #Embed your target bit.
srl $yourMessageByte, $yourMessageByte, 1 #Bitshift right by one...
addi $counter, $counter, 1 #Increment counter
bne $counter, $BitsInByte, ITERBYTE #continue loop if we have not read the whole byte
Безопасность этого метода зависит от того факта, что большинство людейне могу отличить слегка разные оттенки одного цвета.(Не могли бы вы сказать мне, является ли этот текст #000000
или #000001
)?
Обратите внимание, однако, что существуют методы для определения этого уровня стенографии, так как он не очень сложный.Как правило, это включает в себя сканирование компьютеров на наличие среднего шума изображений или сравнение существующих изображений с их модифицированными аналогами.Однако, если вам просто нужно что-то, что не распознается человеком (или не читается), тогда это отличное решение.