Cifrar y descifrar un archivo fácilmente con openSSL

Publicado el 16 marzo 2016 por Gaspar Fernández Moreno @gaspar_fm

Queremos cifrar (o como queráis, codificar, encriptar...) un documento rápidamente desde la consola, con la posibilidad de que pueda ser descifrado. Por ejemplo, nos puede servir para transmitir por e-mail (o un chat) un archivo confidencial, para almacenar elementos privados en la nube, o para que alguien no se entere del contenido de un archivo.

Guía rápida

Para codificar un archivo:

y para decodificar:

Explicación

El primer argumento es el algoritmo de cifrado/descifrado, podéis encontrar algoritmos como aes, des, base64 y muchos más. Ejecutando "openssl help" podemos ver los algoritmos de cifrado (cypher commands) disponibles.

El argumento -d servirá para decodificar, podríamos usar -e para codificar, pero no hace falta ponerlo, ya que el comportamiento por defecto es codificar.

Con el argumento -in archivo indicaremos el archivo de entrada. Si queremos codificar, el archivo de entrada será el archivo original (descifrado), pero si queremos descifrar, decodificar o desencriptar (todo sea por el SEO), el archivo que acompaña a -in debe ser el archivo codificado.

Ahora viene la contraseña para descifrarlo. Algunos algoritmos (por ejemplo base64, no usa password, y da igual si lo pones). La contraseña puede ser de varias formas:

  • pass:password es una clave en texto plano y tiene que ir con la palabra pass: delante.
  • env:var cogerá la clave de una variable de entorno del sistema.
  • file:pathname cogerá la clave de la primera línea de un archivo de texto
  • fd:number cogerá la clave desde un descriptor de fichero, que puede ser una pipe, por ejemplo, y nos vendrá bien si ejecutamos el comando desde un programa.
  • stdin la pide por la entrada estándar (sin preguntar nada)

Si no ponemos -pass y el argumento requiere una contraseña, la pedirá por teclado y presentará un mensaje en pantalla.

Por último -out fichero. Ahí indicaremos el archivo donde tenemos que escribir el resultado de la operación. Si estamos cifrando un archivo, aquí indicaremos el archivo cifrado. Si estamos descifrando, podremos el archivo final descifrado.

En la práctica...

Muchas veces queremos compartir un archivo delicado, por ejemplo, una contraseña, por correo electrónico, porque no hay otra manera. Aunque utilicemos un sistema de cifrado en el correo, a veces, las dos partes no tienen software que lo soporte o las claves compartidas, pero sí puede ser que conozcan una palabra secreta. Esta puede ser una buena forma de compartir ese archivo.

También, lo suelo utilizar para cifrar copias de seguridad que transmito entre servidores, sobre todo cuando hay un servidor al que van las copias de seguridad de varios servicios.

¿Qué otros usos le darás a estos comandos?
Foto principal: Martins Zemlickis