Esteganografía en Python
Este Módulo ocultará los archivos dentro de las imágenes (actualmente PNG) y exportará la imagen modificada al disco.
El tamaño máximo del archivo que se puede ocultar dentro de una imagen depende de la dimensión de la misma.
max_file_size = ( height_of_image * width_of_image * 6 / 8 ) bytes
#tamñao=(altura*ancho*6/8)bytes
‘100k words.txt‘ está escondido en ‘original_image.png’ lamado como ‘image_with_100k words.png‘. Mira y comprueba si puedes detectar la diferencia entre estas dos imágenes. Puedes usar este Módulo para extraer ‘100k words.txt’ de la imagen ‘image_with_100k words.png’
Ejemplo
Imagen Original
![steganographer imagen original](https://esgeeks.com/wp-content/uploads/2020/07/steganographer-imagen-original-1024x576.png)
Imagen Modificada
![steganographer imagen modificada](https://esgeeks.com/wp-content/uploads/2020/07/steganographer-imagen-modificada-1024x576.png)
¡Esta imagen tiene 100 mil palabras escondidas en su interior!
¿Cómo Funciona?
![Ocultar datos en imagen](https://esgeeks.com/wp-content/uploads/2020/07/Ocultar-datos-en-imagen.png)
Se basa en un simple principio de que si cambiamos el LSB (Least Significant Bits) de cada Píxel, entonces el cambio no será significativo y no será notado por los ojos.
Así que, este Módulo toma 2 bits de datos del archivo para ocultarlos y reemplaza los últimos 2 bits de un píxel con esos 2 bits, y luego pasa al siguiente píxel. El cambio máximo en el píxel puede ser de 4 unidades, y el rango de valores en una Imagen PNG es (0,255), por lo que este cambio no será significativo.
En una imagen PNG, cada píxel tiene 3 canales: Rojo (Red), Verde (Green) y Azul (Blue). (Algunas Imágenes PNG tienen 1 o 4 canales, pero este Programa las convertirá en 3 canales) Un pixel típico en una Imagen PNG se ve como:
a_pixel = (17,32,11) # (RED, GREEN, BLUE)
Entonces, podemos ahorrar 3 veces 2 bits en un Pixel, eso significa 6 bits por pixel. Eso nos lleva al límite superior del tamaño del archivo, que se puede ocultar en una imagen:
max_file_size = ( height_of_image * width_of_image * 6 / 8 ) bytes
Entendamos tomando un ejemplo. Los datos a ocultar son:
binary_data = 0b100111
Tomemos los dos primeros bits y reemplacémoslos con el Canal Red de nuestro ‘a_pixel’.
a_pixel = (0b10001, 0b100000, 0b1011) # binary representation of a_pixel values
# Let's change a_pixel's RED Channel
# 0b10001 -> 0b10010 ( First 2 bits are 10 )
a_pixel = (0b10010, 0b100000, 0b1011) # modified pixel
Tomemos otra vez 2 bits de binary_data y reemplacemos los últimos 2 bits del Canal GREEN con ellos.
a_pixel = (0b10010, 0b100000, 0b1011)
# Let's change a_pixel's GREEN Channel
# 0b100000 -> 0b100001 ( The 2 bits are 01 )
a_pixel = (0b10010, 0b100001, 0b1011) # modified pixel
Hagámoslo una vez más con el Canal BLUE y habremos terminado.
a_pixel = (0b10010, 0b100001, 0b1011)
# Let's change a_pixel's BLUE Channel
# 0b1011 -> 0b1011 ( The 2 bits are 11 ) ; Notice that the value wasn't changed this time
a_pixel = (0b10010, 0b100001, 0b1011) # pixel wasn't modified this time
Así que, hemos escondido nuestro mensaje de 6 bits en un píxel, veamos los cambios en el píxel
a_pixel = (0b10001, 0b100000, 0b1011) = (17, 32, 11)
a_pixel_with_data = (0b10010, 0b100001, 0b1011) = (18, 33, 11)
Como podemos ver, el cambio no es ni siquiera perceptible a nivel de píxeles. El Módulo hace esto repetidamente hasta que todos nuestros datos son guardados en la imagen.
![Uso de steganographer](https://esgeeks.com/wp-content/uploads/2020/07/Uso-de-steganographer-1024x635.jpg)
Por Hacer
- Añadir soporte para imágenes JPEG
- Añadir la opción de cifrado
- Añadir la auto detección del nombre del archivo a extraer
Licencia
MIT
steganographer (este enlace se abre en una nueva ventana) por priyansh-anand (este enlace se abre en una nueva ventana)
Steganograpy in Python | Hide files or data in Image Files
Software Libre, ¡Diablos, sí!