Par1-02-1-2005 PDF - Departamento de Computación

Anuncio
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
Descargar