encrypt decrypt cbc bash encryption openssl cryptography aes

bash - cbc - openssl decrypt rsa



AES128-CBC "mal número mágico" y "error al leer el archivo de entrada" (1)

Estoy tratando de descifrar un archivo ( part444.txt ) con un mensaje:

y2EdLtmNQsZkvwwf8jf3fM6c1thfzF0sQfblayGIBik=

Este es el texto codificado en base64 codificado bajo 128 bit AES en modo CBC. No está acolchado El IV es los primeros 16 bytes del texto cifrado y la clave es h4ckth1sk3yp4d16 .

Sé que la gente recibió el error del número mágico malo de los problemas con Base64 pero ahora recibo el "error al leer el archivo de entrada" y no sé a dónde ir desde aquí.

Yo he tratado:

openssl enc -base64 -d part444.txt | openssl aes-128-cbc -d -k h4ckth1sk3yp4d16

¿Por qué me encuentro con los errores "mal número mágico" y "error al leer el archivo de entrada" ?


Esto es una especie de dolor relacionado con openssl, porque el cifrado de openssl hace suposiciones sobre el relleno y deriva una clave salada de la contraseña ingresada que tiene que apagar deliberadamente.

Es mucho más fácil de hacer en Python con decir PyCrypto , donde estas suposiciones no se hacen.

>>> import base64 >>> data = base64.b64decode(''y2EdLtmNQsZkvwwf8jf3fM6c1thfzF0sQfblayGIBik='') >>> from Crypto.Cipher import AES >>> aes_crypter = AES.new(''h4ckth1sk3yp4d16'', AES.MODE_CBC, data[:16]) >>> aes_crypter.decrypt(data[16:]) # this gives the encrypted secret.

Es posible hacerlo con openssl, pero debe leer los datos codificados en base64: saque los primeros 16 bytes y recuérdelo como su $IV (después de codificarlo de nuevo en el hex que openssl espera), comience a leer todos los bytes después de los primeros 16 y recordarlo como $CIPHERTEXT (y decir volver a codificar en base64). Similar para $KEY , tiene que convertirlo de ASCII a bytes en hexadecimal. Suponiendo que hayas almacenado estos en variables, entonces funcionaría lo siguiente:

IV=`base64 -d part444.txt | xxd -p -l 16` CIPHERTEXT=`base64 -d part444.txt | cut -b 17- | base64` KEY=`echo -n h4ckth1sk3yp4d16 |xxd -p` echo $CIPHERTEXT | openssl aes-128-cbc -d -a -nopad -K $KEY -iv $IV && echo ""

Nota base64 -d decodifica base64 a binario (utilizando base64 desde GNU coreutils; en BSD reemplaza con base64 -D ), base64 b64 codifica datos binarios, cut -b 17- lee desde el 17 ° byte de datos hasta el final del archivo, y xxd -p convierte binario a hex.