Mise à jour le 09/12/2021
Chiffrer un fichier

Chiffrer un fichier



1. Pour chiffrer un fichier

1.1 Avec demande de mot de passe à l'utilisateur

openssl enc -aes-256-cbc -pbkdf2  -in toto.enc  -out toto.txt


1.2 Avec un mot de passe en paramètre

openssl enc -aes-256-cbc -pbkdf2  -in toto.txt  -out toto.encrypted -pass pass:mot_de_passe


2. Pour déchiffrer un fichier

C'est la même ligne, mais avec l'option -d en plus :

openssl enc -aes-256-cbc -pbkdf2 -d -in toto.encrypted  -out toto.txt  -pass pass:mot_de_passe


3. Script bash

3.1 Script de chiffrement des fichiers d'un dossier

Le script suivant va chiffrer tous les fichiers correspondant au résultat du find (ici tous les fichiers textes du répertoire courant et de ses sous-répertoire). Le premier argument doit être le mot de passe.

#!/bin/bash

if [ -z "$1" ]
  then
    echo "Le premier argument doit etre un mot de passe"
    exit 1;
fi

for i in $(find -name \*.txt); do
    echo  "ENCRYPT: $i";
    openssl enc -aes-256-cbc -pbkdf2  -in $i -out $i.encrypted -pass pass:"$1"

    if [ $? -eq 0 ]
    then
        rm $i;
    else
        rm $i.encrypted;
    fi
done


3.2 Script de déchiffrement des fichiers d'un dossier

Le script suivant prend en paramètre un mot de passe et décrypte tous les fichiers préfixés par ".encrypted". Si le déchiffrement réussi, le fichier source est remplacé par le fichier décrypté.

#!/bin/bash

if [ -z "$1" ]
  then
    echo "Le premier argument doit etre un mot de passe"
    exit 1;
fi

for i in $(find -name \*.encrypted); do
    FILE_OUT_NAME="${i/\.encrypted/}"
    echo  "DECRYPT: $FILE_OUT_NAME";

    openssl enc -d -aes-256-cbc -pbkdf2  -in $i -out "$FILE_OUT_NAME" -pass pass:"$1"

    if [ $? -eq 0 ]
    then
        rm "$i";
    else
        rm "$FILE_OUT_NAME";
    fi
done


4. Pour ajouter une option dans Nautilus de chiffrement/déchiffrement

Nautilus est l'application par défaut dans Gnome 3 pour explorer les fichiers.
On peut ajouter des scripts bash à executer au clic droit sur un fichier.

4.1 Le répertoire de script

Le répertoire de script Nautilus pour l'utilisateur courant se situe ici :

~/.local/share/nautilus/scripts

Par défaut, le dossier est vide.

4.2 Premier pas dans la création d'un script Nautilus

Créer un fichier script pour Nautilus est assez facile, voici un exemple très simple qui va enregistrer le nom du fichier sélectionné par le clic droit dans un fichier temporaire.

4.2.1 Création et enregistrement du fichier

Créer ce fichier et l'enregistrer dans ~/.local/share/nautilus/scripts/test.sh

#!/bin/bash

CURRENT_DIR=`pwd`
CURRENT_FILE_PATH="${CURRENT_DIR}/${1}"
echo $CURRENT_FILE_PATH > /tmp/nautilus_script.txt


Puis ajouter les droits d'execution sur le fichier :

chmod +x ~/.local/share/nautilus/scripts/test.sh


Puis, ouvrir Nautilus, faire un clic droit sur le fichier, sélectionner Scripts > test.sh.

Constater que le fichier /tmp/nautilus_script.txt a bien été créé.


4.3 Création des scripts de chiffrement et de déchiffrement

Créer les deux fichiers "encrypt" et "decrypt" avec le contenu suivant :

~/.local/share/nautilus/scripts/encrypt

#!/bin/bash

CURRENT_DIR=`pwd`
CURRENT_FILE_PATH="${CURRENT_DIR}/${1}"

if [[ -f $CURRENT_FILE_PATH ]]
then

    ENCRYPTED_FILE_PATH="${CURRENT_FILE_PATH}.encrypted"
    ENCRYPTION_PASSWORD="SECRET"

    openssl enc -aes-256-cbc -pbkdf2  -in "${CURRENT_FILE_PATH}" -out "${ENCRYPTED_FILE_PATH}" -pass pass:$ENCRYPTION_PASSWORD

    if [ $? -eq 0 ]
    then
      rm "${CURRENT_FILE_PATH}"
    else
      rm "${ENCRYPTED_FILE_PATH}";
    fi
fi


~/.local/share/nautilus/scripts/decrypt

#!/bin/bash

CURRENT_DIR=`pwd`
CURRENT_FILE_PATH="${CURRENT_DIR}/${1}"

if [[ -f $CURRENT_FILE_PATH ]]
then
FILE_OUT_NAME="${CURRENT_FILE_PATH/\.encrypted/}"
ENCRYPTION_PASSWORD="SECRET"

    openssl enc -d -aes-256-cbc -pbkdf2  -in "${CURRENT_FILE_PATH}" -out "${FILE_OUT_NAME}" -pass pass:$ENCRYPTION_PASSWORD

    if [ $? -eq 0 ]
    then
        rm "${CURRENT_FILE_PATH}"
    else
        rm "${FILE_OUT_NAME}";
    fi
fi


Enfin, mettre les droits d'execution sur les deux fichiers "encrypt" et "decrypt" :

chmod +x ~/.local/share/nautilus/scripts/decrypt ~/.local/share/nautilus/scripts/encrypt


Voilà, vous avez maintenant deux raccourcis rapides dans Nautilus pour chiffrer et déchiffrer un fichier.

💣️Limite: la valeur de la variable $ENCRYPTION_PASSWORD est facilement trouvable.


💣️Ce script ne fonctionne que pour des fichiers simples, pas avec des dossiers.


💡️Pour chiffrer un dossier, l'astuce est de le zipper avant de le chiffrer.
Voir ici : https://www.reddit.com/r/crypto/comments/4g5i9q/how_do_i_use_openssl_to_encrypt_a_folder/