|
@@ -252,33 +252,35 @@ En la experiencia de laboratorio de hoy completarás una aplicación de estegano
|
252
|
252
|
#### Instrucciones:
|
253
|
253
|
|
254
|
254
|
|
255
|
|
-1) Carga a QtCreator el proyecto `Steganography` haciendo doble "click" en el archivo `Steganography.pro` en el directorio `Documents/eip/Repetitions-Steganography` de tu computadora. También puedes ir a `http://bitbucket.org/eip-uprrp/repetitions-steganography` para descargar la carpeta `Repetitions-Steganography` a tu computadora.
|
|
255
|
+1. Carga a `QtCreator` el proyecto `Steganography`. Hay dos maneras de hacer esto:
|
256
|
256
|
|
257
|
|
-El proyecto contiene el esqueleto de una aplicación para recuperar mensajes empotrados en imágenes. Los mensajes que estarás recobrando se empotraron utilizando la técnica del bit menos significativo. El final de cada mensaje se codificó utilizando el caracter ASCII con código binario `00000000`.
|
|
257
|
+ * Utilizando la máquina virtual: Haz doble “click” en el archivo `Steganography.pro` que se encuentra en el directorio `/home/eip/labs/repetitions-steganography` de la máquina virtual.
|
|
258
|
+ * Descargando la carpeta del proyecto de `Bitbucket`: Utiliza un terminal y escribe el commando `git clone http:/bitbucket.org/eip-uprrp/repetitions-steganography` para descargar la carpeta `repetitions-steganography` de `Bitbucket`. En esa carpeta, haz doble “click” en el archivo `Steganography.pro`.
|
258
|
259
|
|
259
|
|
-2) Compila y corre el programa. Debes obtener una interface que luce parecida a:
|
|
260
|
+ El proyecto contiene el esqueleto de una aplicación para recuperar mensajes empotrados en imágenes. Los mensajes que estarás recobrando se empotraron utilizando la técnica del bit menos significativo. El final de cada mensaje se codificó utilizando el caracter ASCII con código binario `00000000`.
|
260
|
261
|
|
261
|
|
-![img1.png](images/img1.png)
|
|
262
|
+2. Compila y corre el programa. Debes obtener una interface que luce parecida a:
|
262
|
263
|
|
263
|
|
-3) El botón `Load Image` fue programado para permitir al usuario cargar una imagen y desplegarla. Tu tarea es programar la funcionalidad del botón `Retrieve Message` para analizar la imagen y extraer el mensaje escondido. El mensaje escondido debe desplegarse en la ventana que dice `Write a message`.
|
|
264
|
+ ![img1.png](images/img1.png)
|
264
|
265
|
|
265
|
|
-4) Estarás trabajando con el archivo `steganography.cpp`. Completa la función `ExtractMessage` que recibe una imagen de esteganografía para que extraiga los dígitos del mensaje binario empotrado en la imagen y los guarde en un "string". La función debe invocar otra función `binaryStringToMessage` que convierta el "string" de `0`'s y `1`'s en los caracteres del mensaje y devolver el mensaje oculto.
|
|
266
|
+3. El botón `Load Image` fue programado para permitir al usuario cargar una imagen y desplegarla. Tu tarea es programar la funcionalidad del botón `Retrieve Message` para analizar la imagen y extraer el mensaje escondido. El mensaje escondido debe desplegarse en la ventana que dice `Write a message`.
|
266
|
267
|
|
267
|
|
-Por ejemplo, si los primeros píxeles de la imagen fuesen los siguientes,
|
|
268
|
+4. Estarás trabajando con el archivo `steganography.cpp`. Completa la función `ExtractMessage` que recibe una imagen de esteganografía para que extraiga los dígitos del mensaje binario empotrado en la imagen y los guarde en un "string". La función debe invocar otra función `binaryStringToMessage` que convierta el "string" de `0`'s y `1`'s en los caracteres del mensaje y devolver el mensaje oculto.
|
268
|
269
|
|
269
|
|
- ````
|
270
|
|
- 0x98 99 98 0x00 00 01 0x00 00 00 0x01 01 00
|
271
|
|
- 0x01 01 01 0x01 00 01 0x01 00 00 0x01 01 01
|
272
|
|
- 0xf0 ea 00 0x44 00 f0 0x00 aa 22 . . . .,
|
273
|
|
- ````
|
|
270
|
+ Por ejemplo, si los primeros píxeles de la imagen fuesen los siguientes,
|
274
|
271
|
|
275
|
|
- tu función `ExtractMessage` extraería los bits menos significativos de cada componente de color construiría el siguiente `string`: `”010001000110111101100111000000000…”`.
|
|
272
|
+ `0x98 99 98 0x00 00 01 0x00 00 00 0x01 01 00 0x01 01 01 0x01 00 01 0x01 00 00 0x01 01 01 0xf0 ea 00 0x44 00 f0 0x00 aa 22 . . .`,
|
|
273
|
+
|
|
274
|
+ tu función `ExtractMessage` extraería los bits menos significativos de cada componente de color construiría el siguiente `string`: `"010001000110111101100111000000000…"`.
|
276
|
275
|
|
277
|
|
- Nota que tu algoritmo debe tener algún mecanismo para detectar si el último bloque de 8 caracteres extraídos eran todos `0`. Cuando esto pase, el algoritmo debe parar de leer los píxeles.
|
|
276
|
+
|
|
277
|
+ Nota que tu algoritmo debe tener algún mecanismo para detectar si el último bloque de 8 caracteres extraídos eran todos `0`. Cuando esto pase, el algoritmo debe parar de leer los píxeles.
|
278
|
278
|
|
279
|
|
- El “string” de dígitos binarios debe ser enviado a otra función `binaryStringToMessage` (ver Ejercicio 2) que interprete los `0`'s y `1`'s como los bits de caracteres ASCII. En el ejemplo, si pasaras el argumento `”010001000110111101100111000000000”` a la función `binaryStringToMessage`, debería devolver "Dog" (porque `01000100` corresponde a `D`, `01101111` es 'o', `01100111` es 'g', y un `00000000` simboliza que se terminó el “string”.)
|
|
279
|
+
|
|
280
|
+ El "string" de dígitos binarios debe ser enviado a otra función `binaryStringToMessage` (ver Ejercicio 2) que interprete los `0`'s y `1`'s como los bits de caracteres ASCII. En el ejemplo, si pasaras el argumento `”010001000110111101100111000000000”` a la función `binaryStringToMessage`, debería devolver "Dog" (porque `01000100` corresponde a `D`, `01101111` es 'o', `01100111` es 'g', y un `00000000` simboliza que se terminó el “string”.)
|
280
|
281
|
|
281
|
|
-Para poder implementar el algoritmo de extracción del mensaje, debes entender cómo fue empotrado el mensaje. Si es necesario, repasa la sección “Empotrando un mensaje en una imagen”.
|
|
282
|
+
|
|
283
|
+ Para poder implementar el algoritmo de extracción del mensaje, debes entender cómo fue empotrado el mensaje. Si es necesario, repasa la sección “Empotrando un mensaje en una imagen”.
|
282
|
284
|
|
283
|
285
|
|
284
|
286
|
### Ejercicio 2 - Interpretar el mensaje
|