compression - comprimir imagenes jpg
¿Cómo funciona la ocultación de archivos en archivos jpeg? (4)
Estaba leyendo un artículo que explica cómo ocultar archivos en imágenes JPEG .
Me pregunto cómo es posible que un archivo contenga datos jpeg y un archivo rar sin ninguna distorsión visible en la imagen o en el archivo comprimido.
Supongo que tiene algo que ver con cómo se representa el archivo comprimido o el archivo jpeg en forma binaria, pero no tengo idea de cómo funciona esto.
¿Alguien puede elaborar sobre eso?
Esta respuesta no aborda el caso exacto en el enlace que proporcionó, pero proporciona otra forma de ocultar datos:
También sería teóricamente posible ocultar un archivo dentro de la imagen JPEG en sí, pero necesitaría un programa complicado para escribir los datos codificados y luego leerlos nuevamente.
Básicamente, una fotografía JPEG contiene mucha información que, si se cambia, no se notaría al ojo humano. Imagina que tienes una foto de una persona con una camisa azul. Si te acercas a esa camisa, verás que no es un color azul uniforme, sino que está formado por una multitud de manchas de color, la mayoría de las cuales son de un tono azulado (pero algunas también pueden ser de otros colores). Usted podría cambiar fácilmente algunas de esas manchas a un tono ligeramente diferente y no haría ninguna diferencia visible obvia a la imagen.
Un programa inteligente podría incrustar un código en la foto cambiando sutilmente los píxeles a un patrón que representa datos. Un ejemplo muy simple: si el "tono" (es decir, el tono de color) se representa con un número entre 0 y 255, los píxeles de un tono uniforme podrían representar un bit "0" y los píxeles de tono impar un bit "1". Sería difícil para el ojo humano detectar tal diferencia en la imagen.
Es una idea antigua y en este artículo se explica la cantidad de datos que se pueden ocultar de esta manera: datos de alta capacidad que se ocultan en imágenes comprimidas con JPEG (2004)
Hay un algoritmo simple que lo implementé con matlab. Si divide su imagen a 8 bits. el bit más significativo tiene la información más valiosa y puede eliminar los bits 0 y 1 sin ningún cambio en la imagen original. para que pueda poner su archivo en lugar de los bits 0 y 1. Vi este algoritmo en el libro anil.k.jain.
Todo lo que está haciendo es agregar el archivo al final de una secuencia JPEG. Entonces espera que su decodificador JPEG no lea el marcador EOI, encuentre datos allí y diga que algo está mal.
Una imagen JPEG es un flujo de bytes que comienza con un marcador SOI y termina con un marcador EOI.
ZIP y RAR son flujos de byte. Un flujo ZIP comienza con 50 4B. Un flujo RAR comienza con 52 61 72 21 1A 07.
El método descrito en el enlace anterior toma una copia binaria de (múltiple) un flujo JPEG y le agrega un flujo ZIP o RAR.
Los decodificadores RAR / ZIP escanean el flujo hasta que encuentran la firma para RAR o ZIP (ignorando el flujo JPEG).
En general, ocultar un archivo dentro de otro archivo es una práctica conocida como Steganography . El método descrito en el enlace que proporcionó simplemente concatena el .rar
hasta el final del archivo .jpg
utilizando el operador +
, aprovechando los diferentes encabezados de cada tipo de archivo. @ user3344003 hace un excelente trabajo explicando por qué esto funciona en su respuesta . Esto no distorsiona la imagen porque los datos de la imagen no se modifican.
Otro método común para ocultar un archivo dentro de una imagen es usar el bit menos significativo (LSB) de cada byte. La forma en que se realiza esto es reemplazar cada octavo bit en el flujo de bits de la imagen con el siguiente bit del archivo que desea ocultar. Esto funciona porque los colores de la imagen pueden distorsionarse ligeramente sin ser percibidos fácilmente por el ojo humano. En este enfoque, el tamaño de la imagen en el disco no crecerá como lo haría en el método de su enlace. Esto hace que la evidencia del archivo oculto sea mucho más difícil de detectar. Para una visión detallada de este y otros métodos esteganográficos, vea este documento de Bret Dunbar .