0% encontró este documento útil (0 votos)
22 vistas5 páginas

Parte A

El documento describe el modo de operación ECB en cifrado, destacando su simplicidad y rapidez en comparación con CBC, aunque este último es más seguro. También se explica la necesidad del padding para ajustar el tamaño de los bloques de texto y se presentan ejemplos de código en Java para cifrar y descifrar mensajes utilizando el algoritmo AES. Se menciona que descifrar un mensaje con una clave incorrecta genera una excepción.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
22 vistas5 páginas

Parte A

El documento describe el modo de operación ECB en cifrado, destacando su simplicidad y rapidez en comparación con CBC, aunque este último es más seguro. También se explica la necesidad del padding para ajustar el tamaño de los bloques de texto y se presentan ejemplos de código en Java para cifrar y descifrar mensajes utilizando el algoritmo AES. Se menciona que descifrar un mensaje con una clave incorrecta genera una excepción.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd

Parte A

¿Qué significa ECB como modo de ejecución del algoritmo de


cifrado?

ECB es un modo de operación en el que cada bloque del mensaje se


cifra por separado usando la misma clave simétrica, dividiendo el texto
en bloques de tamaño fijo.

¿Cuál es la ventaja de ECB comparado con CBC?

ECB es más simple y rápido que CBC porque no requiere vector de


inicialización (IV). Sin embargo, CBC es más seguro porque introduce
aleatoriedad en el proceso de cifrado.

¿Qué es y para qué se necesita el padding?

El padding rellena los bloques de texto que no alcanzan el tamaño


requerido (ej. 128 bits para AES). Se necesita para asegurar que el
tamaño del mensaje sea múltiplo del tamaño de bloque del algoritmo.

¿Cuánto tiempo tarda cifrar y descifrar el mensaje de entrada?

¿Qué resultado se obtiene al descifrar tc1 con k1?

El resultado que se obtiene es el mismo mensaje original.

¿Qué resultado se obtiene al descifrar tc1 con k2?


El resultado es incorrecto y se lanza una excepción, que tiene que ver
con el uso de las llaves para la descifrado, ya que las llaves son
distintas.

El método main2 se describe a continuación

public class Main2 {


private final static String ALGORITMO = "AES";

public static void imprimir(byte[] datos) {

for (byte b : datos) {

[Link](b + " "); }

[Link]();

public static void main(String[] args) throws Exception {

Scanner scanner = new Scanner([Link]);

[Link]("Ingrese un mensaje: ");

String mensaje = [Link]();

byte[] textoClaro = [Link]();

KeyGenerator keyGen = [Link](ALGORITMO);

[Link](128);

SecretKey k1 = [Link]();

SecretKey k2 = [Link]();

Simetrico simetrico = new Simetrico();

byte[] tc1 = [Link](textoClaro, k1);

[Link]("Texto cifrado con k1: ");

imprimir(tc1);

byte[] tc2 = [Link](textoClaro, k2);

[Link]("Texto cifrado con k2: ");

imprimir(tc2);

byte[] descifrado_k1 = [Link](tc1, k1);


[Link]("Descifrado tc1 con k1: " + new
String(descifrado_k1));

try {

byte[] descifrado_k2 = [Link](tc1, k2);

[Link]("Descifrado tc1 con k2: " + new


String(descifrado_k2)); }

catch (Exception e) {

[Link]();

Los métodos main 3 y main 4 se describen a continuación:

Main 3 y Main 4

==Main 3==

public class Main3 {

private final static String ALGORITMO = "AES";

public static void main(String[] args) throws Exception {

Scanner scanner = new Scanner([Link]);

[Link]("Ingrese un mensaje: ");

String mensaje = [Link]();

byte[] textoClaro = [Link]();

KeyGenerator keyGen = [Link](ALGORITMO);

[Link](128);

SecretKey llave = [Link]();


try (FileOutputStream out = new FileOutputStream("[Link]"))
{

[Link]([Link]());

Simetrico simetrico = new Simetrico();

byte[] textoCifrado = [Link](textoClaro, llave);

try (FileOutputStream out = new


FileOutputStream("[Link]")) {

[Link](textoCifrado);

[Link]("Llave y mensaje cifrado guardados en


archivos.");

==Main 4===

public class Main4 {

private final static String ALGORITMO = "AES";

public static void main(String[] args) throws Exception {

byte[] llaveBytes = new byte[16];

try (FileInputStream in = new FileInputStream("[Link]")) {

[Link](llaveBytes);
}

SecretKey llave = new SecretKeySpec(llaveBytes, ALGORITMO);

byte[] textoCifrado = new byte[1024];

int bytesRead;

try (FileInputStream in = new FileInputStream("[Link]")) {

bytesRead = [Link](textoCifrado);

byte[] mensajeRecortado = new byte[bytesRead];

[Link](textoCifrado, 0, mensajeRecortado, 0,
bytesRead);

Simetrico simetrico = new Simetrico();

byte[] textoDescifrado = [Link](mensajeRecortado,


llave);

String mensaje = new String(textoDescifrado);

[Link]("Mensaje descifrado: " + mensaje);

También podría gustarte