Crittografa più file contemporaneamente


10

Sto scrivendo uno script che crea archivi di progetti e quindi ne crea 7z per semplificarmi il salvataggio di versioni specifiche e la conservazione di backup crittografati.

Dopo aver generato gli archivi e sono arrivato alla fase di crittografia, mi piacerebbe crittografare i file con una chiamata, gpgse possibile, in modo da consentire all'utente di inserire la passphrase una sola volta. Altrimenti, dovremmo o memorizzare nella cache la passphrase dell'utente in memoria (cosa che mi piacerebbe davvero non fare) o farle inserire e confermare la passphrase per ogni singolo progetto archiviato (che è peggio).

C'è un modo per passare più nomi di file per gpgfarli crittografare tutti in una volta sola?

Se provo questo:

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

... vedo il seguente errore nella shell:

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

C'è un modo per fare ciò che sto cercando di realizzare?


2
Perché prima usi 7zip (presumibilmente) per comprimere, poi dici a GnuPG di comprimere di nuovo usando bzip2? Non vedo che ti guadagni molto in termini di efficienza dello spazio, e vedo che costa parecchio CPU.
un CVn

1
> C'è un modo per passare più nomi di file a gpg per farlo crittografare> tutti in una volta sola? Sì, prova questa risposta
Anchan,

Risposte:


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

No non c'è.

Probabilmente vorrai passare la passphrase con una delle seguenti opzioni di gpg (quest'ultima sarebbe la scelta più sicura):

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

10

Poiché GnuPG non lo supporta direttamente, il modo per farlo sarebbe quello di aggiungere un altro livello, ad esempio usando tar.

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

E per estrarre:

gpg -d projects.gpg | tar x

Ti verrà lasciato con project1.7ze project2.7z. Il tuo script può quindi riprendere da dove eri rimasto.


3

Se vuoi provare qualcos'altro, GPG ci sono altri metodi di backup per crittografare più file:

fonte originale: 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`"
}

Utilizzo: basta usare "DIRECTORY di backup" per la crittografia e "decifrare DIRECTORY.tar.gz.aes"


1

Sono riuscito a fare qualcosa del genere, oggi:

  1. Cambiato directory nella directory contenente i file di destinazione, ed eseguito uno script Bash per trovare i nomi file richiesti ed elencarli in un file di testo che ho chiamato found.txt.

  2. Ho eseguito uno script Bash chiedendo a gpg2 di leggere ogni nome di file in un ciclo e in una variabile di memoria, e nello stesso ciclo per crittografarlo usando la mia chiave di firma e specificando che era per la lettura da solo. gpg2 apre un popup per inserire la tua passphrase, che pop-up ha una piccola casella di controllo in cui puoi scegliere di mantenere la passphrase attiva per la sessione. Cattiva pratica, ma non così male se non si è in rete e si spegne immediatamente dopo la sessione di crittografia.

  3. L'unico problema era che c'era ay / n da gestire. Quindi mi sono seduto con il dito sulla chiave Y e ho crittografato 51 file nos in meno di un minuto.


Gli script sono riportati di seguito:

Lo script 'find' era un file chiamato 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       

Lo script di crittografia è stato chiamato 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"

Questo deve essere eseguito come utente normale:

$ bash ReadFilenameAndEncrypt.sh found.txt

Spero che sia di aiuto. Non ho capito come evitare il y / n.


0

Il seguente comando funziona per me fintanto che non ho nomi di file con spazi all'interno.

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

Puoi anche usare il comando 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

Infine, se si desidera utilizzare un file per la password, utilizzare:

--passphrase-file <filename>

-1

Sì, c'è un modo semplice:

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

-1

echo "Inserisci una password:"

leggi la password

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

Hmmmmmm GPG chiede con GraphicMessageBox una password per ogni file.

Quindi, ho deciso di utilizzare CRYBULL (programma di crittografia che ho creato) in C-ANSI. È possibile scaricare gratuitamente da www.labolida.com

trova . -type f -exec crybull {} {} .cry $ password codifica \;


Si prega di provare a dare risposte più elaborate. Inoltre, questa domanda ha già una risposta. Leggi le FAQ per imparare a rispondere a domande correttamente .
zuazo,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.