openssl : Chiffrer-Déchiffrer une chaine de caractères ou un fichier

Encodage en BASE64

Encoder le contenu d'un fichier sur la sortie standard :

$ cat fic1
systèmes
$ openssl enc -base64 -in fic1
c3lzdMOobWVzCg==

Encoder le contenu d'un fichier et écrire le résultat dans un autre fichier :

$ openssl enc -base64 -in fic1 -out fic1.enc
$ cat fic1.enc
c3lzdMOobWVzCg==

Encoder une chaine de caractères :

$ echo -n "secret" | openssl enc -base64
c2VjcmV0

Ne pas oublier d'ajouter l'option -n à la commande echo sinon un retour chariot sera ajouté à la chaine encodée.

Décoder une chaine de caractères :

$ echo "c2VjcmV0" | openssl enc -base64 -d
secret

Décoder le contenu d'un fichier sur la sortie standard :

$ openssl enc -base64 -in fic1.enc -d
systèmes

Décoder le contenu d'un fichier et écrire le résultat dans un autre fichier :

$ openssl enc -base64 -d -in fic1.enc -out fic1.dec
$ cat fic1.dec
systèmes

Chiffrer un fichier avec un algorithme de chiffrement et un mot de passe

1 - Choisir un algorithme de chiffrement :

$ openssl list-cipher-commands

Voir également la page de manuel de la commande enc.

2 - Chiffrer un fichier avec l'algorithme DES3 et écrire le contenu dans un autre fichier (génération d'un fichier binaire) :

$ openssl enc -des3 -salt -in fic1 -out fic1.des3
enter des-ede3-cbc encryption password:
Verifying - enter des-ede3-cbc encryption password:
$ cat fic1.des3
Salted__d▒j▒G(▒▒r▒d}▒i▒7▒▒▒▒M▒#

Pour le déchiffrage (indication du mot de passe avec l'option -pass) :

$ openssl enc -des3 -d -salt -in fic1.des3 -out file.txt -pass pass:aaaa
$ cat file.txt
systèmes

Chiffrage DES3 mais avec un encodage en BASE64 (pour un envoi par mail par exemple) :

$ openssl enc -des3 -a -salt -in fic1 -out fic1.des3
enter des-ede3-cbc encryption password:
Verifying - enter des-ede3-cbc encryption password:
$ cat fic1.des3
U2FsdGVkX1/Cl8Jr0Aw/3eDLegGPc7meTjWbUQZcNkw=

Pour le déchiffrage :

$ openssl enc -des3 -d -a -salt -in fic1.des3 -out file.txt
enter des-ede3-cbc decryption password:
$ cat file.txt
systèmes

Pour chiffrer un fichier en indiquant le mot de passe dans la ligne de commande (avec l'option -pass) :

$ openssl enc -des3 -salt -in fic1 -out fic1.des3 -pass pass:aaaa

Pour déchiffrer un fichier en indiquant le mot de passe dans un fichier :

$ openssl enc -des3 -salt -in fic1 -out fic1.des3 -pass file:/root/pass

Dans ce cas, seule la première ligne du fichier est utilisée comme mot de passe ou phrase de passe.

Etiquettes: 

Commentaires

Pas très efficace comme technique pour chiffrer. Si l'on tente l'expérience avec vos exemples, j'obtiens exactement les mêmes résultats... Donc, il est possible de décrypter très facilement une chaîne de caractères comme un message ou un mot de passe, il suffit de faire une correspondance brute-force avec une liste de mots crypter préalablement.... et la correspondance se fera pratiquement toute seule!...

Je ne comprends pas car je viens de refaire tous les tests de mon coté et à aucun moment j'obtiens le même résultat.

Par exemple, avec la commande suivante et le mot de passe "aaaa"

Premier test:

$ openssl enc -des3 -salt -in fic1 -out fic1.des3
$ cat fic1.des3
Salted__▒1▒0▒▒▒]▒w▒▒▒▒▒▒S▒▒

Second test:

$ openssl enc -des3 -salt -in fic1 -out fic1.des3
$ cat fic1.des3
Salted__▒▒Wr[\▒▒▒g}▒p▒▒▒▒7▒▒

Troisième test:

$ openssl enc -des3 -salt -in fic1 -out fic1.des3
$ cat fic1.des3
Salted__▒S▒▒▒F] ▒▒v▒u▒{▒▒[

On voit bien que le contenu des trois fichiers chiffrés n'est pas identique et pourtant le fichier source et le mot de passe sont les mêmes pour les trois tests.

Je sais que le message date mais ça peut toujours servir.
La différence provient de l'argument -slat, il permet d'ajouter une couche de protection supplémentaire. Le "sel" est un élément que l'on retrouve souvent dans les algo de hashage, dans le cas présent il s'agit d'une suite de 8 octets aléatoires (défini au moment du chiffrage) qui est utilisée de la même manière que le mot de passe sur le texte à chiffrer. Le salage est d'ailleurs contenu dans le résultat afin de pouvoir être déchiffré.

Pour ne pas saler le résultat, il faut utiliser l'argument -nosalt.

Exemple avec salage :

$ echo -n "lation" | openssl enc -des3 -pass pass:aaaa
Salted__Ç♀Ó~∟*ô♣ð╗'♫☺FÎurì╗öƨ☻ý
$ echo -n "lation" | openssl enc -des3 -pass pass:aaaa
Salted__â)4ü‗FÅÕÞ¸("{î☻♠0ǽÃ‗[Ów
$ echo -n "lation" | openssl enc -des3 -pass pass:aaaa
Salted__╬cÛ↓`0►©.╗1C£♥k┬Éf° ▓┴ ►

Exemple sans salage :

$ echo -n "lation" | openssl enc -nosalt -des3 -pass pass:aaaa
h©*╝zZbÌÓÅïY9»[Q
$ echo -n "lation" | openssl enc -nosalt -des3 -pass pass:aaaa
h©*╝zZbÌÓÅïY9»[Q
$ echo -n "lation" | openssl enc -nosalt -des3 -pass pass:aaaa
h©*╝zZbÌÓÅïY9»[Q

Le prefix "Salted__" inique que l'on a faire à quelque chose de salé, les 8 octets suivant correspondent au sel utilisé.

C'est pour cette raison que j'indique cet argument (-salt) dans la plupart des exemples que je cite.

A mon avis, en tant que débutant en informatique, il est difficile pour comprendre ces étapes. Je trouve qu'il est facile d'utiliser le logiciel de cryptage, comme truecrypt et file protector.

Ce qui est expliqué ici, est 100% lignes de commandes sous Linux ce qui permet d'automatiser le processus sans aucune intervention humaine.

Sinon, le logiciel TrueCrypt n'est plus maintenu et la dernière version disponible (7.2) ne permet plus de crypter mais seulement de décrypter.

Concernant file protector, c'est un tuto sous Windows.
Pour ma part, sous Windows, j'utilise le couple GPG4Win / Kleopatra qui permet de signer, crypter et décrypter des fichiers, des mails etc etc...

Ajouter un commentaire

Filtered HTML

  • Les adresses de pages web et de messagerie électronique sont transformées en liens automatiquement.
  • Tags HTML autorisés : <a> <em> <strong> <cite> <blockquote> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • Les lignes et les paragraphes vont à la ligne automatiquement.

Plain text

  • Aucune balise HTML autorisée.
  • Les adresses de pages web et de messagerie électronique sont transformées en liens automatiquement.
  • Les lignes et les paragraphes vont à la ligne automatiquement.
CAPTCHA
Cette question permet de s'assurer que vous êtes un utilisateur humain et non un logiciel automatisé de pollupostage.
CAPTCHA visuel
Entrez les caractères (sans espace) affichés dans l'image.