¿Cómo cifro rápidamente un archivo con AES?


81

Quiero encriptar un archivo usando AES-256. ¿Cómo puedo hacer eso rápida y fácilmente, y cómo puedo yo, o alguien más, descifrarlo nuevamente?

Respuestas:


86

Desafortunadamente, no hay una solución fácil para asegurar sus cosas. Piense en su caso de uso, tal vez algo más que AES sea más adecuado.


Si desea un cifrado independiente de plataforma muy simple, puede usar openssl .

Tenga en cuenta: puede usar esto para ocultar ideas de regalo de cumpleaños.txt de su compañero de cuarto, ¡pero no espere que sea seguro contra un atacante determinado!

  1. Como se señaló en los comentarios, este método utiliza una función de derivación de clave ingenua, por lo que su contraseña debe ser superlativamente buena para que tenga la oportunidad de ser segura.
  2. Además, este método no autentica el texto cifrado, lo que significa que un atacante puede modificar o corromper el contenido sin que usted lo note.
  3. Para muchos tipos de seguridad, el cifrado simplemente no es suficiente (por ejemplo, no se puede usar el cifrado para comunicarse de forma segura)

Si todavía quieres usar openssl:

  • Cifrado:

    openssl aes-256-cbc -in attack-plan.txt -out message.enc

  • Descifrado:

    openssl aes-256-cbc -d -in message.enc -out plain-text.txt

Puede obtener openssl para base64codificar el mensaje utilizando el -ainterruptor tanto en el cifrado como en el descifrado. De esta manera, puede pegar el texto cifrado en un mensaje de correo electrónico, por ejemplo. Se verá así:

stefano:~$ openssl aes-256-cbc -in attack-plan.txt -a
enter aes-256-cbc encryption password:
Verifying - enter aes-256-cbc encryption password:
U2FsdGVkX192dXI7yHGs/4Ed+xEC3ejXFINKO6Hufnc=

Tenga en cuenta que puede elegir entre cifrados y modos de operación. Para uso normal, recomiendo aes 256 en modo CBC. Estos son los modos de cifrado que tiene disponibles (solo contando AES):

aes-128-cbc ← this is okay
aes-128-ecb
aes-192-cbc
aes-192-ecb
aes-256-cbc ← this is recommended
aes-256-ecb

Ver también:

Tenga en cuenta:

OpenSSL le pedirá una contraseña. ¡Esta no es una clave de cifrado, no está limitada a 32 bytes! Si vas a transferir archivos con otra persona, tu secreto compartido debería ser muy fuerte. Puede usar este sitio para tener una idea de cuán buena es su contraseña:

Advertencia: He verificado que estos sitios no envían su contraseña al servidor, pero eso puede cambiar en cualquier momento. Use estos sitios con herramientas de desarrollo / inspector y verifique si envían algo antes de escribir su contraseña segura.


99
openssl aes-256-cbces más corto que openssl enc -aes-256-cbcy funciona también. La página del manual para esto está disponible ejecutando man enc. Nunca use ecbpara datos que no deben ser moderados, siempre use cbc. -saltes redundante ya que es predeterminado. Si omite, -out filenamela salida se escribirá en la salida estándar, lo cual es útil si solo necesita analizar datos, pero no escribirlos en el disco. El siguiente comando muestra la cound línea para el texto llano: openssl aes-256-cbc -d -in filename | wc -l. (otro uso, la lectura de un archivo: openssl aes-256-cbc -d -in filename | less)
Lekensteyn

1
Utilizo casi exactamente esto en un script: /usr/bin/openssl enc -aes-256-cbc -a -salt -in $1 -out ${1}.enc con el reverso como cabría esperar.
belacqua

1
No hay ninguna razón para preferir AES 256 a AES 128. @Lekensteyn Tampoco use nunca el BCE para datos confidenciales; básicamente, el BCE nunca debe usarse (solo para expertos: el BCE nunca debe usarse excepto en algunos casos muy específicos). En términos más generales, la opensslherramienta de línea de comandos es principalmente una prueba de concepto para probar la biblioteca OpenSSL. La respuesta correcta a esta pregunta es GPG o algún archivador como 7z .
Gilles

1
Me gustaría agregar que en openssl encrealidad no es tan seguro si tienes una contraseña débil. Previamente recomendé cierto uso de openssl enc, pero ahora sugiero usarlo gpgporque usa un KDF de una mejor manera. Mira esta respuesta .
Lekensteyn

2
-1 Por recomendar el uso de OpenSSL de bajo nivel. No proporciona ninguna funcionalidad HMAC y, como señala @Lekensteyn, carece de KDF adecuado.
gertvdijk

26

Me gusta usar el gpgcomando:

Cifrar:

gpg --cipher-algo AES256 --symmetric filename.tar.gz

Taquigrafía:

gpg --cipher-algo AES256 -c filename.tar.gz

Esto le pedirá una frase de contraseña.

Descifrar:

gpg --output filename.tar.gz --decrypt filename.tar.gz.gpg

Taquigrafía:

gpg -o filename.tar.gz -d filename.tar.gz.gpg

También puede agregar cipher-algo AES256a ~/.gnupg/gpg.confpara hacer que AES256 sea el predeterminado. (Según la página de manual, es CAST5 )


También puede usar AES(que significa AES-128). AES-128 es un poco más rápido y no es menos seguro.
Gilles

2
+1. También tenga en cuenta que GnuPG también le proporciona autenticación de mensajes (HMAC) cuando usa AES (que OpenSSL carece de ser la respuesta más votada en el momento de la escritura). Información de fondo: superuser.com/a/633716/157409
gertvdijk

¿Cómo puedo evitar el gpgalmacenamiento en caché de la contraseña?
user76284

16

7z (cuando se utiliza la opción de contraseña ) utiliza un cifrado AES de 256 bits (con estiramiento de clave SHA256 ).

Instálelo ( p7zip-full), haga clic con el botón derecho en el archivo o directorio que desea cifrar y elija Comprimir , .7z y Otras opciones / Contraseña .

ingrese la descripción de la imagen aquí

Para descifrar, haga clic derecho en el archivo .7z y elija Extraer aquí .


1
¿Cómo se inicia la GUI para 7z?
m0skit0

4

aescrypt

El sitio web vinculado contiene una herramienta de cifrado / descifrado aes de código abierto de 256 bits y es multiplataforma: MacOs, Windows, Linux y otros a través de Java.

Cifrar: aescrypt -e <file>

Descifrar: aescrypt -d <file>

Puede hacer una copia de seguridad y cifrar su carpeta de inicio utilizando la sintaxis:

tar -cvf - /home/<home_folder> | aescrypt -e -p <password_message> - > backup.tar.aes

instalación de ubuntu

Descargue y extraiga la fuente

make
sudo make install

otras plataformas

Descargue los binarios o el código fuente del sitio web.


3

Muchas de las sugerencias que hubiera hecho ya se han presentado en este hilo. Básicamente, openssl es realmente la forma más fácil de cifrar un archivo o script. Sin embargo, advertiría contra el uso de AES-256 solo porque no está disponible en todas las versiones de openssl en algunas plataformas. La mayoría de los sistemas operativos más nuevos ... es decir, Linux lo tiene. Pero otros como AIX 5.3 no lo hacen (creo que HP-UX también). Si tiene la intención de usar su archivo o script en diferentes plataformas, le recomiendo usar AES-128 porque está disponible en todas partes.

¿Cómo puede encriptar "rápida y fácilmente" un archivo usando AES-128?

Un sitio como www.ShellScrypt.com usa openssl AES-128 con bastante intensidad para encriptar los scripts de shell y luego hace que las copias encriptadas de los scripts sean ejecutables. Todo lo que tiene que hacer es pegar el script en el sitio, y se generará un archivo zip para usted. Ese archivo zip contendrá la versión encriptada (y ejecutable si es un script) de su archivo. Esto le permite encriptar " fácilmente " y " convenientemente " un archivo / script sin tener que cumplir con ningún requisito de paquete o módulo en cada sistema en el que pretende utilizar el script o ejecutar varios encantamientos complejos y confusos de comandos openssl.

A continuación se muestra un comando openssl básico de cifrado / descifrado que utiliza AES-128:

test@test-VirtualBox:~$ 
test@test-VirtualBox:~$ echo precious-content | openssl aes-128-cbc -a -salt -k mypassword
U2FsdGVkX1+K6tvItr9eEI4yC4nZPK8b6o4fc0DR/Vzh7HqpE96se8Fu/BhM314z
test@test-VirtualBox:~$
test@test-VirtualBox:~$ echo U2FsdGVkX1+K6tvItr9eEI4yC4nZPK8b6o4fc0DR/Vzh7HqpE96se8Fu/BhM314z | openssl aes-128-cbc -a -d -salt -k mypassword
precious-content
test@test-VirtualBox:~$ 
test@test-VirtualBox:~$

2
Solo dejo un comentario para avisar que "shellscrypt.com" está fuera de servicio (alias: el sitio se ha ido).
e-sushi

1

Agregando a la respuesta de Stefano Palazzo, creé una pequeña función bash que funciona de manera similar al comando base64.

Aes256 cifrará un archivo y luego lo codificará en base64. Al hacer lo contrario, decodificará, descifrará y escupirá el texto sin formato original.

aes256() {
  decodeMe=""
  isPipe="$([ ! -t 0 ] && echo "true" || echo "false")"

  if [ "$1" = '-d' ] || [ "$1" = '--decode' ]; then
    decodeMe="-d"
    shift
  fi

  if [ "$isPipe" = "true" ]; then
    read input
    printf '%s\n' "$input" | openssl aes-256-cbc -a $decodeMe
    exitCode="$?"
  else
    openssl aes-256-cbc -a $decodeMe -in "$*"
    exitCode="$?"
  fi

  unset isPipe decodeMe input
  return "$exitCode"
}

Uso:

echo "my string" | aes256
# enter aes-256-cbc encryption password
# Returns: U2FsdGVkX1++e/BhBGlNOzNvarqq7zI13S/hbiKVzXQ=

echo "U2FsdGVkX1++e/BhBGlNOzNvarqq7zI13S/hbiKVzXQ=" | aes256 -d
# enter aes-256-cbc decryption password
# Returns: my string

aes256 file.plain > file.crypt
# enter aes-256-cbc encryption password

aes256 -d file.crypt
# enter aes-256-cbc decryption password
# Spits out original unencrypted file.
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.