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.