
Python-программа для стеганографии файлов в изображения с использованием наименьшего значащего бита.
Python программа, основанная на стегонографических методах для сокрытия файлов в изображениях с использованием техники наименьшего значащего бита.
Я использовал самый базовый метод — наименьший значащий бит. Цветной пиксель состоит из красного, зелёного и синего цветов, каждый закодирован одним байтом. Идея заключается в хранении информации в первом бите каждой RGB-компоненты пикселя. В худшем случае десятичное значение отличается на единицу, что незаметно для человеческого глаза. На практике, если у вас недостаточно места для хранения всех данных в первом бите каждого пикселя, следует начать использовать второй бит и так далее. Нужно помнить: чем больше данных вы храните в изображении, тем легче это можно обнаружить.
Модуль LSBSteg основан на OpenCV для сокрытия данных в изображениях. Он использует первый бит каждого пикселя и каждого цвета изображения. Код довольно прост для понимания; если все первые биты использованы, модуль начинает использовать второй бит, поэтому чем больше данных, тем сильнее изменяется изображение. Программа может скрыть все данные, если в изображении достаточно места. Основные функции:
Поддерживаются только изображения без сжатия, а именно не JPEG, так как LSB-биты могут быть изменены в процессе сжатия.
Для этого инструмента требуется только OpenCV и его зависимости.
pip install -r requirements.txt
LSBSteg.py
Usage:
LSBSteg.py encode -i <input> -o <output> -f <file>
LSBSteg.py decode -i <input> -o <output>
Options:
-h, --help Show this help
--version Show the version
-f,--file=<file> File to hide
-i,--in=<input> Input image (carrier)
-o,--out=<output> Output image (or extracted file)
Кодирование текста:
#encoding
steg = LSBSteg(cv2.imread("my_image.png"))
img_encoded = steg.encode_text("my message")
cv2.imwrite("my_new_image.png", img_encoded)
#decoding
im = cv2.imread("my_new_image.png")
steg = LSBSteg(im)
print("Text value:",steg.decode_text())
Стеганография изображений:
#encoding
steg = LSBSteg(cv2.imread("carrier.png")
new_im = steg.encode_image(cv2.imread("secret_image.jpg"))
cv2.imwrite("new_image.png", new_im)
#decoding
steg = LSBSteg("new_image.png")
orig_im = steg.decode_image()
cv.SaveImage("recovered.png", orig_im)
Двоичная стеганография:
#encoding
steg = LSBSteg(cv2.imread("carrier.png"))
data = open("my_data.bin", "rb").read()
new_img = steg.encode_binary(data)
cv2.imwrite("new_image.png", new_img)
#decoding
steg = LSBSteg(cv2.imread("new_image.png"))
binary = steg.decode_binary()
with open("recovered.bin", "rb") as f:
f.write(data)
Это программное обеспечение лицензировано по MIT.