Nombre: Cédula: Parcial Nº 1 (15%) Fecha: Sección Crea un package Parcial1 para desarrollar las clases en ese paquete. Criptografía Criptografía es la parte de la Criptología que trata del diseño e implementación de sistemas secretos. La transmisión de mensajes en forma secreta ha sido una necesidad desde la antigüedad. Con la llegada de las comunicaciones electrónicas el interés por transmitir mensajes ininteligibles para todos, salvo para el receptor no ha hecho sino aumentar. La transmisión de mensajes a través de la red, requiere utilizar un Criptógrafo que ponga en clave (transforme) los mensajes antes de enviarlos. Por ejemplo el mensaje “EMBARCAMOS AL ANOCHECER” puede transformarse en “HRDHCPROLL DQ CUZPYGZXU”. El cifrado de Gronsfeld es del tipo conocido como polialfabéticos. Esto significa que se usa más de un alfabeto cifrado para poner en clave el mensaje y que se cambia de uno a otro según se pasa de una letra del texto a otra. Es decir que deben tenerse un conjunto de alfabetos cifrados y una forma de hacer corresponder cada letra del texto original con uno de ellos. Para dejar esto más claro veamos una de las tablas para hacer un cifrado de este tipo. A B C D E F G H I 0: C D E F G H I 1: D E F G H I 2: F G H I 3: H I J K L M N O P Q R S T U V W X Y Z J K L M N O P Q R S T U V W X Y Z A B J K L M N O P Q R S T U V W X Y Z A B C J K L M N O P Q R S T U V W X Y Z A B C D E J K L M N O P Q R S T U V W X Y Z A B C D E F G 4: L M N O P Q R S T U V W X Y Z A B C D E F G H I J K 5: N O P Q R S T U V W X Y Z A B C D E F G H I 6: R S T U V W X Y Z A B C D E F G H I 7: T U V W X Y Z A B C D E F G H I 8: X Y Z A B C D E F G H I 9: C D E F G H I J K L M J K L M N O P Q J K L M N O P Q R S J K L M N O P Q R S T U V W J K L M N O P Q R S T U V W X Y Z A B Ahora escogemos una serie de dígitos del 0 al 9 como clave. Supongamos que usamos 1203456987. Luego utilizamos la tabla para el cifrado del mensaje: EMBARCAMOS AL ANOCHECER Empezamos por escribir la clave debajo del texto original las veces que sea necesario EMBARCAMOS AL ANOCHECER 1203456987 12 034569871 Y sustituimos cada letra por la correspondiente del alfabeto que indica el número debajo suyo. HRDHCPROLL DQ CUZPYGZXU Universidad de Carabobo. Facultad de Ingeniería. Departamento de Computación. Computación Avanzada. 1-2005 Nombre: Cédula: Parcial Nº 1 (15%) Fecha: Sección Tu trabajo es desarrollar una clase Criptografo, que permite crear objetos Criptografos para poner en clave mensajes de cadenas de caracteres, los cuales únicamente contienen letras mayúsculas y espacios en blanco. 1. La clase debe contener como variables miembro una matriz de 10x26 (matriz de cifrado), de tipo char, un campo private String clave que almacena la clave de dígitos del 0 al 9 y un vector de tipo char que almacena las 26 letras del alfabeto en mayúsculas. [1 punto] 2. La clase debe contener un método public toString que retorne un String que contiene las letras del Alfabeto, un salto de línea, los valores de la matriz por filas, un salto de línea, y a continuación la clave. Por ejemplo: A B C D E F G H I J K L MNO P Q R S T U V WXY Z 0: C D E F G H I J K L M N O P Q R S T U V W X Y Z A B 1: D E F G H I J K L M N O P Q R S T U V W X Y Z A B C 2: F G H I J K L M N O P Q R S T U V W X Y Z A B C D E 3: H I J K L M N O P Q R S T U V W X Y Z A B C D E F G 4: L M N O P Q R S T U V W X Y Z A B C D E F G H I J K 5: N O P Q R S T U V W X Y Z A B C D E F G H I J K L M 6: R S T U V W X Y Z A B C D E F G H I J K L M N O P Q 7: T U V W X Y Z A B C D E F G H I J K L M N O P Q R S 8: X Y Z A B C D E F G H I J K L M N O P Q R S T U V W 9: C D E F G H I J K L M N O P Q R S T U V W X Y Z A B 1203456987 [4 puntos] 3. El constructor de la clase debe recibir como parámetro un String para inicializar el campo clave, debe construir el vector que almacena las 26 letras del alfabeto y debe crear la matriz de cifrado. Las 26 letras del alfabeto desde la “A” hasta la “Z”, tienen un código ASCII que va desde 65 hasta 90 inclusive, para convertir un código ASCII a char utiliza el casting (char)i, donde i varía desde 65 hasta 90, por ejemplo: int i, j; for(i = 65, j=0; i <=90; i++, j++) alfabeto[j]=(char)i; [3 puntos] 4. La clase debe contener un método public String enCriptar(String mensaje), que recibe un mensaje y retorna un String que es la transformación del mensaje que recibe, aplicando el algoritmo del método Gronsfeld. Asume que los mensajes únicamente contienen letras mayúsculas y espacios en blanco. [6 puntos] 5. Para probar la clase Criptógrafo, crea un arreglo de claves (al menos tres), donde cada clave contenga una secuencia de 10 caracteres numéricos sin repetición. Por ejemplo: “1203456987”, “1902835746”, “7035962148”. Luego crea un arreglo de objetos Criptografos, donde cada objeto deberá ser creado con una clave diferente, usando las claves del arreglo de claves. Posteriormente encripta el mismo mensaje (por ejemplo: Universidad de Carabobo. Facultad de Ingeniería. Departamento de Computación. Computación Avanzada. 1-2005 Nombre: Parcial Nº 1 (15%) Cédula: Fecha: Sección “EMBARCAMOS AL ANOCHECER”) con cada uno de los Criptografos creados y escribe para cada uno, el objeto Criptografo y el mensaje encriptado que se obtiene. [3 puntos] Compilación y Ejecución Exitosa [3 puntos] Métodos que puedes necesitar De clase String public char charAt(int index) Returns the character at the specified index. public int length() Returns the length of this string int buscar(char c, char a[]){ int pos=-1; for(int i = 0; (i < a.length)&& (pos == -1);i++) pos = (c ==a[i])? i:-1; return pos; } Retorna la posición de un carácter c en un arreglo a de caracteres, si no lo encuentra retorna -1 Universidad de Carabobo. Facultad de Ingeniería. Departamento de Computación. Computación Avanzada. 1-2005