PRÁCTICA DE LENGUAJES DE PROGRAMACIÓN JUNIO 09 La palabra esteganografía viene del griego y significa literalmente “escritura oculta”, pero últimamente, aplicada a la informática, su significado se ha concretado en la ocultación de texto en imágenes, con la peculiaridad de que el texto a ocultar se mezcla en la imagen de manera que sea imposible (a no ser conozcas el proceso inverso) siquiera detectar que en la imagen existe un mensaje oculto. La práctica correspondiente a junio del curso 08/09 de Lenguajes de Programación consistirá en implementar un software, en Lenguaje C, para realizar esteganografías. La aplicación tendrá dos partes claramente diferenciadas: ocultación de un mensaje en una fotografía y obtención del mensaje oculto en una fotografía (proceso inverso). Estos dos procesos se realizarán mediante dos programas en C distintos, cada uno de ellos que realice una de las dos funciones mencionadas. A continuación se especifican cada uno de ellos y el proceso de ocultación/extracción de la información en la fotografía. PROGRAMA 1. OCULTACIÓN Este programa: - recibirá como parámetros una fotografía en formato jpg y un fichero de texto plano, con extensión .txt, que contiene el mensaje a ocultar - deberá generar como resultado otro fichero jpg, con el mismo nombre que el original pero acabado en -1, en el que se habrá ocultado el mensaje contenido en el fichero de texto, según se explica más adelante. Por ejm, si el original se llama “paisaje.jpg”, el nuevo fichero se llamará “paisaje-1.jpg” PROGRAMA 2. OBTENCIÓN DEL MENSAJE Este programa: - recibirá como parámetro una fotografía en formato jpg - generará como resultado un fichero de texto plano (.txt), cuyo nombre se pedirá por teclado, en el que dejará el mensaje obtenido a partir de la fotografía y en base al método de ocultación explicado a continuación MÉTODO DE OCULTACIÓN El método de ocultación de texto en una fotografía consistirá en ir cambiando bits de la foto por bits del mensaje, hasta haber ocultado todo el mensaje. El proceso de ocultación consiste en ir cambiando los dos bits de menos peso de ciertos bytes de la foto por dos bits del mensaje, hasta que se haya ocultado todo el mensaje. Es decir, para todos los caracteres del mensaje a ocultar, se irán cogiendo de dos en dos bits, empezando siempre por los de mayor peso, y se irán incrustando como los dos bits de menos peso en el correspondiente byte de la foto, teniendo en cuenta que: - los primeros 20 Kb de la foto no se alteran y pasan directamente a la foto resultante - Los dos primeros bytes a ocultar, aunque no forman parte, propiamente hablando, del mensaje, indicarán el nº total de bytes del mensaje que se va a ocultar - Para ocultar el mensaje, éste se irá almacenando, carácter a carácter, de la siguiente forma: o se toman los dos bits de mayor peso del byte que representa el carácter y se ponen en lugar de los dos bits de menos peso del correspondiente byte de la foto. o el siguiente byte de la foto permanece sin alterar. o se toman los dos siguientes bits del byte correspondiente al carácter y se cambian por los dos de menor peso del siguiente byte de la foto. o el proceso se repite hasta incrustar todo el carácter. - Los pasos anteriores hay que aplicarlos a todos los caracteres del mensaje. - Los bytes de la foto restantes (los que no se han usado en la encriptación del mensaje) se copian directamente en la foto resultante. En la siguiente figura se muestra gráficamente el proceso MÉTODO DE OBTENCIÓN DEL MENSAJE Es el inverso del anterior: se irán obteniendo, de dos en dos, los bits ocultos según el método anterior y se reconstruirá el mensaje, que se irá almacenando en el fichero resultante, teniendo en cuenta que el nº de caracteres del mensaje almacenados en la foto se ha codificado convenientemente y no habrá que extraer más caracteres que los indicados por éste número. NORMAS DE PRESENTACIÓN • es obligatorio construir la aplicación en base a dos proyectos, uno para cada ejecutable, compartiendo los dos, al menos, un fichero de cabecera (.h) y, si es el caso, los ficheros de código (.c) conteniendo la implementación de las funciones de apoyo que sean convenientes. • se podrá utilizar el compilador que el alumno crea oportuno, pero es obligatorio indicar claramente en la portada de la memoria cuál ha sido el usado. Independientemente del compilador, será obligatorio entregar los dos ejecutables. No se admitirá ninguna práctica que le falte algún ejecutable. • se entregará un disquete o cd conteniendo obligatoriamente todos los ficheros fuente, los ficheros de los proyectos, los ejecutables y un juego de datos con el que se haya probado el funcionamiento de las aplicaciones. Asimismo, se podrá entregar la práctica por correo electrónico, dirigido a jsaenz@eui.upm.es, y adjuntando un fichero .zip o .rar conteniendo todo lo indicado. • Las prácticas se entregarán al profesor en clase o en los despachos de los profesores de la asignatura (1106 y 1127) en las horas de tutoría que cada uno tiene establecidas, o por correo electrónico según se ha explicado. LA FECHA TOPE DE PRESENTACIÓN SERÁ EL DÍA 5 DE JUNIO DE 2009 y NO SE RECOGERÁ NINGUNA PRÁCTICA ENTREGADA CON POSTERIORIDAD A ESA FECHA (LAS ENTREGADAS POR CORREO ELECTRÓNICO CON FECHA POSTERIOR A LAS 23:59 DEL DÍA 5 DE JUNIO NO SE ADMITIRÁN) • La práctica se realizará individualmente. • Se exige un funcionamiento correcto y se valorará la calidad del código y de la presentación por pantalla. • Las dudas que surjan durante la realización se podrán consultar con los profesores de la asignatura.