Chiffrer plusieurs fichiers à la fois


10

J'écris un script qui crée des archives de projet, puis en crée des archives 7z pour me permettre d'enregistrer des versions spécifiques et de conserver des sauvegardes cryptées.

Une fois que j'ai généré les archives et que j'arrive à la phase de chiffrement, je voudrais chiffrer les fichiers avec un seul appel, gpgsi possible, afin que l'utilisateur ne saisisse sa phrase secrète qu'une seule fois. Sinon, nous devrions soit mettre en cache la phrase secrète de l'utilisateur en mémoire (ce que j'aimerais vraiment ne pas faire), soit les faire entrer et confirmer leur phrase secrète pour chaque projet archivé (ce qui est pire).

Existe-t-il un moyen de transmettre plusieurs noms de fichiers pour les gpgchiffrer tous en une seule fois?

Si j'essaye ceci:

$ gpg --cipher-algo AES256 --compression-algo BZIP2 -c project1.7z project2.7z

... Je vois l'erreur suivante dans le shell:

usage: gpg [options] --symmetric [filename]

Existe-t-il un moyen de faire ce que je cherche à accomplir?


2
Pourquoi utilisez-vous d'abord 7zip (vraisemblablement) pour compresser, puis dites à GnuPG de compresser à nouveau en utilisant bzip2? Je ne vois pas que cela vous gagne beaucoup en termes d'efficacité d'espace, et je vois que cela coûte beaucoup de CPU.
un CVn

1
> Existe-t-il un moyen de transmettre plusieurs noms de fichiers à gpg pour les crypter> tous en une seule fois? Oui, essayez cette réponse
Anchan

Réponses:


5
Is there a way to pass multiple filenames to gpg to have it encrypt all of
them in one go?

Non, il n'y en a pas.

Vous voudrez probablement transmettre la phrase secrète avec l'une des options gpg suivantes (cette dernière option serait la plus sûre):

--passphrase
--passphrase-file
--passphrase-fd

10

Puisque GnuPG ne le supporte pas directement, la façon de le faire serait d'ajouter une autre couche, par exemple en utilisant tar.

tar c project1.7z project2.7z | gpg --cipher-algo AES256 --compression-algo BZIP2 -co projects.gpg

Et pour extraire:

gpg -d projects.gpg | tar x

Vous vous retrouverez avec project1.7zet project2.7z. Votre script peut alors reprendre là où vous vous étiez arrêté.


3

Si vous souhaitez essayer autre chose que GPG, il existe d'autres méthodes de sauvegarde pour crypter plusieurs fichiers:

source d'origine: http://www.obsd.hu/docs/Unix-backup-with-aes.txt

vi ~/.bashrc

backup() {
if [[ "$1" = "" ]]; then echo 'specify full path' && exit 1; fi
CURRENTDATE="`date +%F-%Hh`"
echo 'Did you do a screenshot of the Desktop and backup all the Bookmarks of the webbrowser and backup cronjobs, etc...?'
read
echo "START: `date`"
ORIGDIR="$1"; ORIGDIRNORM="`echo $ORIGDIR | sed 's/\/$//g'`"; tar cvf - "${ORIGDIRNORM}/" 2>/dev/null | gzip -9 - 2>/dev/null | openssl aes-256-cbc -salt -out "${ORIGDIRNORM}-backup-${CURRENTDATE}.tar.gz.aes" && cksum "${ORIGDIRNORM}-backup-${CURRENTDATE}.tar.gz.aes" >> checksum.txt
echo "END: `date`"
}

decrypt() {
if [[ "$1" = "" ]]; then echo 'specify full path' && exit 1; fi
CURRENTDATE="`date +%F-%Hh`"
echo 'This will decrypt the backup in the current working directory, are you sure?'
read
echo "START: `date`"
ORIGDIR="$1"
openssl aes-256-cbc -d -salt -in "${ORIGDIR}" | tar -xz -f -
echo "END: `date`"
}

Utilisation: utilisez simplement "backup DIRECTORY" pour le chiffrement et "decrypt DIRECTORY.tar.gz.aes"


1

Ont réussi à faire quelque chose comme ça, aujourd'hui:

  1. Changé le répertoire vers le répertoire contenant les fichiers cibles, et exécuté un script Bash pour trouver les noms de fichiers requis et les répertorier dans un fichier texte que j'ai appelé found.txt.

  2. Exécuté un script Bash demandant à gpg2 de lire chaque nom de fichier dans une boucle et dans une variable de mémoire, et dans la même boucle de le crypter en utilisant ma clé de signature et en spécifiant qu'il était à lire par moi-même. gpg2 affiche une fenêtre contextuelle pour la saisie de votre phrase secrète, laquelle fenêtre contextuelle comporte une petite case à cocher où vous pouvez choisir de conserver votre phrase secrète active pour la session. Mauvaise pratique, mais pas si mauvaise si vous n'êtes pas sur le Net, et vous éteignez immédiatement après votre session de cryptage.

  3. Le seul problème était qu'il y avait ay / n à gérer. Alors je me suis assis avec mon doigt sur la clé Y et j'ai chiffré 51 fichiers nos en moins d'une minute.


Les scripts sont donnés ci-dessous:

Le script 'find' était un fichier appelé FindFilesAndListtoTextfile.sh:

#! /usr/bin/bash
#Try this to list the files you want using the appropriate file identifier i.p.o "DSCN.*":

source="/home/myself/Whatever  #note no gaps on either side of the equal-to sign 
 target="/home/myself/Whatever/found.txt"
 find $source -name "*DSCN*" -type f > $target       

Le script de chiffrement s'appelait ReadFilenameAndEncrypt.sh:

#!/bin/bash
line="/home/myself/Whatever/found.txt"
while IFS='' read -r line || [[ -n "$line" ]]; do
    echo "Text read from file: $line"
    gpg2 -e -u mysecretkeyID -r mysecretkeyID "$line"
  done < "$1"

Cela doit être exécuté en tant qu'utilisateur régulier:

$ bash ReadFilenameAndEncrypt.sh found.txt

J'espère que cela t'aides. Je n'ai pas compris comment éviter le y / n.


0

La commande suivante fonctionne pour moi tant que je n'ai aucun nom de fichier avec des espaces.

for file in $(ls | grep -v ".gpg"); do gpg -c --cipher-algo AES256 --compress-algo 1 --batch --passphrase "<password>" $file && rm -f $file; done

Vous pouvez également utiliser la commande find.

for file in $(find /home -type f | grep -v ".gpg"); do gpg -c --cipher-algo AES256 --compress-algo 1 --batch --passphrase "<password>" $file && rm -f $file; done

Enfin, si vous souhaitez utiliser un fichier pour le mot de passe, utilisez:

--passphrase-file <filename>

-1

Oui, il existe un moyen simple:

for x in *; do 
  gpg -r (yourencrytionkey.com) -o $x.pgp -e $x
done

-1

echo "Entrez un mot de passe:"

lire le mot de passe

trouver . -type f -exec gpg --passphrase $ password -c {} \;

Hmmmmmm GPG demande avec un GraphicMessageBox un mot de passe pour chaque fichier.

J'ai donc décidé d'utiliser CRYBULL (programme de cryptographie que j'ai créé) dans C-ANSI. Vous pouvez télécharger gratuitement sur www.labolida.com

trouver . -type f -exec crybull {} {} .cry $ password encode \;


Veuillez essayer de faire des réponses plus élaborées. De plus, cette question est déjà répondue. Lisez la FAQ pour savoir comment répondre correctement aux questions .
zuazo
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.