Llevo bastante tiempo dandole vueltas a la idea de hacer una libreria de esteganografia en python, para poder usarla como base para una aplicacion completa... pues me he decidido a empezar, y estos son los primeros resultados:

baseops.py

bmp.py

El primero es simplemente un conjunto de funciones que creo que pueden ser de utilidad en los distintos modulos (extraer el LSB de un byte, descomponer un char en bits, leer un numero de un archivo...)

El segundo es lo que va comenzando a ser el modulo de esteganografia con BMP, por ahora esta bastante limitado, solo soporta imagenes de al menos 24bits de profundidad (esto seguramente no cambie, pues aceptar profundidades menores solo hace que la implementacion no sea tan sencilla, añadiendo una utilidad minima). Ademas, por ahora no soporta ningun tipo de compresion, aunque la idea seria implementar compresion/descompresion usando Bit Field (que se utiliza en imagenes de 32 bits)

La clase que se utilizaria es stego_bmp, inicializandose con el nombre del archivo del bmp base o a analizar, las funciones son:

bmp.addmsg(mensaje[,profundidad_utilizada]) # Añade un string a la imagen bmp.addfile(archivo[,profundidad_utilizada]) # Añade un archivo a la imagen

bmp.getmsg([profundidad_utilizada]) # Recupera un string a la imagen bmp.getfile(archivo[,profundidad_utilizada]) # Recupera un archivo de la imagen

bmp.dump(mensaje) # Guarda la imagen

Y por supuesto, todo esta bajo la GPLv3 =)

Por ultimo avisar que esto no utiliza ningun tipo de estructura, al recuperar un mensaje o un archivo seguramente obtengais una ristra de bytes extraños al final de el... esto es normal, la idea es hacer que sea versatil, si quieres asegurarte de cuales son los extremos de tu mensaje puedes utilizar algun tipo de caracter especial, se podria utilizar el caracter nulo ('\0') como en C, por ejemplo.

Hasta otra!