Patrice Ferlet
Patrice Ferlet
Créateur de ce blog.
Publié le mars 2, 2011 Temps de lecture: 3 min

Me suivre sur Mastodon

Encrypter un fichier facilement

On discutait sur le canal fedora-fr (IRC, sur freenode.net) quand une question anodine m’a fait jouer avec bash et gnome. La question était de savoir comment encrypter un fichier facilement sous Linux. Casper, un ami du net, parla alors de gpg, puis on a doucement dérivé sur openssl. Et je me suis amusé à faire un truc simple: une icone sur le bureau qui accèpte un fichier à déposer dessus et qui l’encrypte directement. C’est simple comme tout, à condition de connaitre un peu le bash.

Le cahier des charges est le suivant: -une icone simple, juste un drag and drop -encrypte ou décrypte le fichier selon le type -mot de passe demandé, écriture sur le bureau

C’est le second point qui m’a posé un petit souci mais je me suis rendu compte qu’on pouvait tricher. D’abord voyons comment on encrypte avec openssl (j’ai choisi un cryptage des3, assez fiable):

openssl des3 -salt -in fichier1 -out fichier2

Ici, le fichier fichier2 est le fichier encrypté, si je veux le décrypter:

openssl des3  -d -salt -in fichier2 -out fichier3

le fichier fichier3 est alors le résultat, c’est à dire le même fichier que fichier1

Pour savoir reconnaitre un fichier crypté, j’ai triché. Comme j’ai utilisé l’option -salt un //sel// est ajouté. Cela enrichi le fichier à sa première ligne d’un “Salted_” qui apparait… par contre le type de fichier est “data”:

$ file -b fichier2
data

Voilà comment je sais si le fichier est encodé par ma méthode. Et bien faisons un script: ` #!/bin/bash

IN="$@" mime=$(file -b “$IN”) encrypted=1

if [[ “$mime” == “data” ]]; then head -n1 “$IN” | grep “Salted” > /dev/null encrypted=$? fi

if [ “$encrypted” == “1” ]; then #openssl encryption pass=$(zenity –entry –text “Password to encrypt”) openssl des3 -salt -in “$IN” -out ~/Bureau/$(basename $IN).encrypted -pass pass:$pass else #openssl decrypt pass=$(zenity –entry –text “Password to decrypt”) #remove dirname and extension out=$(basename $IN) out=${out%.} openssl des3 -d -salt -in “$IN” -out ~/Bureau/$out -pass pass:$pass if [[ “$?” != “0” ]]; then zenity –error –text “Incorrect Password” fi fi

`

Ce script prend un fichier en argument et écrit le fichier résultant dans le bureau. Vous allez le sauver dans $HOME/bin/encrypter.sh et le rendre exécutable:

chmod +x ~/bin/encrypter.sh

Reste alors à faire un lanceur dans le bureau, tapez cette commande:

cat >  $HOME/Bureau/Encrypter.desktop <<EOF
#!/usr/bin/env xdg-open

[Desktop Entry]
Version=1.0
Type=Application
Terminal=false
Icon[fr_FR]=gnome-panel-launcher
Exec=$HOME/bin/encrypter.sh
Name[fr_FR]=Encrypter
Name=MonTest
Icon=/usr/share/icons/gnome/scalable/status/security-high-symbolic.svg
EOF

chmod +x $HOME/Bureau/Encrypter.desktop

Dans le bureau apparait une icone nommé Encrypter, glisser un fichier (pas un répertoire) sur cette icone, on vous demande un mot de passe pour encrypter le fichier. Dans le bureau apparait alors un fichier suffixé par “.encrypted”

Reglissez ce fichier sur l’icone, on vous demande le mot de passe et si l’opération à marché vous voyez le fichier apparaitre.

Bref, c’est juste un bricolage là, mais c’est intéressant de voir à quel point on peut jouer avec Linux sur ce genre de travail.

comments powered by Disqus