¿Usar OpenSSL para cifrar / descifrar un archivo?

1

Estoy probando OpenSSL ejecutando las pruebas de respuesta conocida que se proporcionan aquí .

Al utilizar AES-128-CBC con los siguientes parámetros:

KEY = 00000000000000000000000000000000
IV = 00000000000000000000000000000000
Input = f34481ec3cc627bacd5dc3fb08f273e6

la salida debe ser la siguiente: 0336763e966d92595a567cc9ce537f5e

Ejecuté el siguiente comando en mi terminal:

openssl aes-128-cbc -e -in in.txt -out out.txt -K  00000000000000000000000000000000 -iv 00000000000000000000000000000000 -p -nosalt

donde el archivo in.txt contiene mi entrada, obtengo un archivo de salida con galimatías. Estoy asumiendo que se está cifrando correctamente porque cuando descifro el mismo archivo con los mismos parámetros, me devuelvo mi entrada.

También probé una herramienta en línea para verificar el resultado proporcionado en el documento en línea, extranet.cryptomathic.com que también proporciona el resultado correcto.

¿Cómo puedo ver la salida en el formato provisto en el documento AESAVS? ¿Es correcto el método que apliqué para cifrar el archivo de texto sin formato o me estoy perdiendo algo aquí?

    
pregunta Hussain Ali Akbar 02.01.2018 - 08:08
fuente

1 respuesta

1

Los archivos de entrada y salida deben contener los datos binarios, mientras que los argumentos IV y KEY deben ser datos hexadecimales. Pero, probablemente haya puesto los datos hexadecimales ( f34481ec3cc627bacd5dc3fb08f273e6 ) en el archivo de entrada y, por lo tanto, creó un archivo de entrada que consta de 32 caracteres ASCII en lugar de 16 bytes (binarios).

Si se hace correctamente, funciona.
Primero decodifique la cadena hexadecimal en binario, es decir, hexadecimal de 32 bytes en datos binarios de 16 bytes:

$ perl -e 'print pack(q[H*],q[f34481ec3cc627bacd5dc3fb08f273e6])'  > in.txt

A continuación, ejecute el cifrado. Tenga en cuenta que, además, he usado la opción -nopad en el cifrado porque de lo contrario, openssl agrega un bloque vacío adicional de 16 bytes para rellenar la entrada al siguiente límite de 16 bytes.

$ openssl aes-128-cbc -nopad -e -in in.txt -out out.txt \
  -K  00000000000000000000000000000000 -iv 00000000000000000000000000000000 -p -nosalt

Y finalmente codifique la salida binaria (16 bytes) en una cadena hexadecimal para que pueda compararla con el resultado esperado:

$ perl -e 'local $/; print unpack(q[H*],<>),"\n"' < out.txt
0336763e966d92595a567cc9ce537f5e
    
respondido por el Steffen Ullrich 02.01.2018 - 08:19
fuente

Lea otras preguntas en las etiquetas