Hagas lo que hagas, no intentes especificar múltiples argumentos -pass
como @mootmoot sugiere en los comentarios. Solo se aplica lo último, como puede verse trivialmente por:
echo test | openssl enc -aes-256-cbc -salt -pass file:key -pass pass:password | openssl enc -d -aes-256-cbc -salt -pass pass:password
Suponiendo que está intentando requerir la contraseña y el archivo de clave para descifrar, la forma más sencilla sería encadenarlos, aunque esto resultará en un ligero aumento de tamaño:
$ echo test | openssl enc -aes-256-cbc -salt | openssl enc -aes-256-cbc -salt -pass file:key >testout
enter aes-256-cbc encryption password:
Verifying - enter aes-256-cbc encryption password:
$ <testout openssl enc -d -aes-256-cbc -salt -pass file:key | openssl enc -d -aes-256-cbc -salt
enter aes-256-cbc decryption password:
test
Sin embargo, debes tener en cuenta que la derivación de clave que utiliza openssl enc
es bastante terrible. El valor predeterminado de 0.9.8 es MD5, y aunque le permite seleccionar otro hash, solo permite una ronda de hash(password || salt)
. 1.1.0 cambia el hash predeterminado a SHA256, pero aún así solo permite una ronda, por lo que la mejora es muy pequeña.
También he visto esto quote de un desarrollador de openssl al que se hace referencia varias veces:
Al final del día, OpenSSL es una * biblioteca *, no un producto de usuario final,
y enc (1) y amigos son herramientas de desarrollo y herramientas de "demostración".
Es de 2009, así que no sé cuánto ha cambiado desde entonces (creo que la utilidad cms
está bien), pero recomendaría evitar enc
si es posible.