
Programa en Python para ocultar archivos en imágenes usando el Bit Menos Significativo.
Programa Python basado en métodos esteganográficos para ocultar archivos en imágenes usando la técnica del Bit Menos Significativo (LSB).
Utilicé el método más básico: el bit menos significativo. Un píxel de color está compuesto de rojo, verde y azul, codificados en un byte. La idea es almacenar información en el primer bit de cada componente RGB del píxel. En el peor de los casos, el valor decimal difiere en uno, lo que no es visible para el ojo humano. En la práctica, si no tienes espacio para almacenar todos tus datos en el primer bit de cada píxel, deberías empezar a usar el segundo bit, y así sucesivamente. Hay que tener en cuenta que cuantos más datos almacenes en una imagen, más fácil será detectarlo.
El módulo LSBSteg se basa en OpenCV para ocultar datos en imágenes. Usa el primer bit de cada píxel y de cada color de una imagen. El código es bastante simple de entender; si ya se usaron todos los primeros bits, el módulo empieza a usar el segundo bit, por lo que cuanto más grandes sean los datos, más se altera la imagen. El programa puede ocultar todos los datos si hay suficiente espacio en la imagen. Las funciones principales son:
Solo se admiten imágenes sin compresión, es decir, no JPEG, ya que los bits LSB podrían alterarse durante la fase de compresión.
Esta herramienta solo requiere OpenCV y sus dependencias.
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)
Codificación de texto:
#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())
Esteganografía de imágenes:
#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)
Esteganografía binaria:
#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)
Este software tiene licencia MIT.