Comment chiffrer rapidement un fichier avec AES?


81

Je souhaite chiffrer un fichier avec AES-256. Comment puis-je le faire rapidement et facilement, et comment puis-je - ou quelqu'un d'autre - le déchiffrer à nouveau?

Réponses:


86

Malheureusement, il n’existe pas de solution simple pour sécuriser vos documents. Pensez à votre cas d'utilisation, peut-être que quelque chose d'autre que AES est mieux adapté.


Si vous souhaitez un cryptage très simple, indépendant de la plate-forme, vous pouvez utiliser openssl .

Remarque: vous pouvez utiliser ceci pour cacher votre anniversaire, mais ne vous attendez pas à ce qu'il soit protégé contre un attaquant déterminé!

  1. Comme indiqué dans les commentaires, cette méthode utilise une fonction de dérivation de clé naïve, votre mot de passe doit donc être extrêmement bon pour que vous puissiez avoir une chance d'être sécurisé.
  2. De plus, cette méthode n'authentifie pas le texte chiffré, ce qui signifie qu'un attaquant peut modifier ou corrompre le contenu sans que vous le remarquiez.
  3. Pour de nombreux types de sécurité, le cryptage ne suffit tout simplement pas (par exemple, vous ne pouvez pas simplement utiliser le cryptage pour communiquer de manière sécurisée)

Si vous voulez toujours utiliser openssl:

  • Chiffrement:

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

  • Décryptage:

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

Vous pouvez obtenir openssl pour base64coder le message en utilisant le -acommutateur pour le chiffrement et le déchiffrement. De cette façon, vous pouvez coller le texte chiffré dans un courrier électronique, par exemple. Ça va ressembler à ça:

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=

Notez que vous avez le choix entre des chiffrements et des modes de fonctionnement. Pour une utilisation normale, je recommande aes 256 en mode CBC. Voici les modes de chiffrement dont vous disposez (uniquement en comptant 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

Voir également:

Notez s'il vous plaît:

OpenSSL vous demandera un mot de passe. Ce n'est pas une clé de cryptage, elle n'est pas limitée à 32 octets! Si vous voulez transférer des fichiers avec quelqu'un d'autre, votre secret partagé devrait être très fort. Vous pouvez utiliser ce site pour avoir une idée de la qualité de votre mot de passe:

Avertissement: j'ai vérifié que ces sites n'envoient pas votre mot de passe au serveur, mais cela peut changer à tout moment. Utilisez ces sites avec dev tools / inspector et vérifiez s’ils envoient quoi que ce soit avant de saisir votre mot de passe fort.


9
openssl aes-256-cbcest plus court que openssl enc -aes-256-cbcet fonctionne aussi. La page de manuel pour cela est disponible en cours d'exécution man enc. Ne jamais utiliser ecbpour des données qui ne doivent pas être tempérées, utilisez toujours cbc. -saltest redondant puisqu'il est par défaut. Si vous omettez, -out filenamela sortie sera écrite sur la sortie standard, ce qui est utile si vous avez juste besoin d'analyser des données, mais pas de les écrire sur le disque. La commande suivante montre la cound de ligne pour le texte brut: openssl aes-256-cbc -d -in filename | wc -l. ( une autre utilisation, la lecture d' un fichier: openssl aes-256-cbc -d -in filename | less)
Lekensteyn

1
J'utilise presque exactement cela dans un script: /usr/bin/openssl enc -aes-256-cbc -a -salt -in $1 -out ${1}.enc avec l'inverse comme on peut s'y attendre.
Belacqua

1
Il n'y a aucune raison de préférer l'AES 256 à l'AES 128. @Lekensteyn N'utilisez jamais la BCE pour des données confidentielles non plus - en principe, la BCE ne devrait jamais être utilisée (pour les experts uniquement: la BCE ne devrait jamais être utilisée, sauf dans des cas très spécifiques). Plus généralement, l' openssloutil de ligne de commande est principalement une preuve de concept pour tester la bibliothèque OpenSSL. La bonne réponse à cette question est soit GPG, soit un archiveur tel que 7z .
Gilles

1
Je voudrais ajouter que ce openssl encn’est vraiment pas sûr si vous avez un mot de passe faible. J'ai déjà recommandé une certaine utilisation de openssl enc, mais suggère maintenant d'utiliser à la gpgplace car il utilise un KDF d'une meilleure façon. Voir cette réponse .
Lekensteyn

2
-1 Pour recommander l'utilisation OpenSSL de bas niveau. Il ne fournit aucune fonctionnalité HMAC et, comme @Lekensteyn le souligne, il manque le fichier KDF approprié.
gertvdijk

26

J'aime utiliser la gpgcommande:

Crypter:

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

Sténographie:

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

Cela vous demandera un mot de passe.

Décrypter:

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

Sténographie:

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

Vous pouvez également ajouter cipher-algo AES256à ~/.gnupg/gpg.confpour faire de AES256 la valeur par défaut. (Selon la page de manuel, il s’agit de CAST5 )


Vous pouvez également utiliser AES(signifiant AES-128). AES-128 est légèrement plus rapide et n'est pas moins sécurisé.
Gilles

2
+1 Notez également que GnuPG fournit également une authentification de message (HMAC) pour vous lorsque vous utilisez AES (OpenSSL n’ayant pas la réponse la plus élevée au moment de la rédaction). Informations de fond: superuser.com/a/633716/157409
gertvdijk

Comment puis-je empêcher gpgde mettre en cache le mot de passe?
user76284 le

16

7z (lorsque l' option de mot de passe est utilisée) utilise un cryptage AES 256 bits (avec étirement de clé SHA256 ).

Installez-le ( p7zip-full), cliquez avec le bouton droit sur un fichier ou un répertoire que vous souhaitez chiffrer, puis choisissez Compresser , .7z et Autres options / Mot de passe .

entrez la description de l'image ici

Pour le déchiffrement, cliquez avec le bouton droit sur le fichier .7z et choisissez Extraire ici .


1
Comment lancez-vous l'interface graphique pour 7z?
m0skit0

4

cryptographie

Le site Web lié contient un outil de chiffrement / déchiffrement aes 256 bits open source et est multiplateforme - MacOs, Windows, Linux et autres par le biais de Java.

Crypter: aescrypt -e <file>

Décrypter: aescrypt -d <file>

Vous pouvez sauvegarder et chiffrer votre dossier personnel en utilisant la syntaxe suivante:

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

installation d'ubuntu

Téléchargez et extrayez le source

make
sudo make install

autres plateformes

Téléchargez les fichiers binaires ou le code source à partir du site Web.


3

Beaucoup de suggestions que j'aurais faites ont déjà été avancées dans ce fil. En fait, openssl est le moyen le plus simple de chiffrer un fichier ou un script. Cependant, je vous déconseille d'utiliser AES-256 simplement parce qu'il n'est pas disponible dans toutes les versions d'OpenSL sur certaines plates-formes. La plupart des nouveaux systèmes d'exploitation ... c'est-à-dire que Linux en sont dotés. Mais d'autres, comme AIX 5.3, ne le font pas (je pense également à HP-UX). Si vous souhaitez utiliser votre fichier ou votre script sur différentes plates-formes, je vous recommande vivement d'utiliser AES-128 car celui-ci est disponible partout.

Comment pouvez-vous "rapidement et facilement" chiffrer un fichier avec AES-128?

Un site comme www.ShellScrypt.com utilise openssl AES-128 de manière assez intensive pour chiffrer les scripts shell, puis rend les copies chiffrées des scripts exécutables. Tout ce que vous avez à faire est de coller le script sur le site et un fichier zip sera généré pour vous. Ce fichier zip contiendra la version cryptée (et exécutable s'il s'agit d'un script) de votre fichier. Cela vous permet de chiffrer " facilement " et " commodément " un fichier / script sans satisfaire à aucune exigence de paquet ou de module sur chaque système pour lequel vous souhaitez utiliser le script ni exécuter plusieurs incantations complexes et déroutantes de commandes openssl.

Ci-dessous, une commande de base cryptage / décryptage openssl utilisant 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
Il suffit de laisser un commentaire pour donner un avertissement indiquant que «shellscrypt.com» est en panne (c'est-à-dire que le site a disparu).
e-sushi

1

En ajoutant à la réponse de Stefano Palazzo, j'ai créé une petite fonction bash qui fonctionne de manière similaire à la commande base64.

Il va aes256 chiffrer un fichier, puis base64 le coder. En effectuant l'inverse, il va décoder, décrypter, puis cracher le texte en clair d'origine en base64.

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"
}

Usage:

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.
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.