2012-07-02 11 views
6

Per farla breve, la mia domanda è: In che modo posso forzare GnuPG quale chiave privata/pubblica utilizzare durante la crittografia/decrittografia dei file?GnuPG: Come crittografare/decrittografare i file utilizzando una determinata chiave?


Qualche spiegazione/Lunga storia

Ho un'applicazione che deve crittografare i file prima di inviarli al S3.

Gli utenti possono scaricare i loro file utilizzando i loro browser dal mio sito Web, nel qual caso devo prima decifrare i file prima di servirli.

lato

client (Delphi 2010): Sono più probabile intenzione di optare per OpenPGPBlackbox

lato server (PHP 5), ho bisogno di capire come crittografare/decifrare i file con i comandi non interattivi .

ho installato GnuPG sul mio server, provato questo codice:

clear_file='/full/path/my-file.zip' 
encrypted_file='/full/path/my-file.zip.pgp' 

# Encrypt file 
/usr/bin/gpg2 --encrypt "$clear_file" 

# Decrypt file 
/usr/bin/gpg2 --decrypt "$encrypted_file" 

Ma sembra che non posso indicare, nella riga di comando, i tasti da utilizzare.

Ogni utente avrà una propria chiave pubblica/privata, quindi devo essere in grado di specificare quale chiave utilizzare per codificare/decrittografare il file in questione.

La mia domanda è: Come posso forzare GnuPG quale chiave privata/pubblica utilizzare durante la crittografia/decrittografia dei file?

risposta

7

Le opzioni che stai cercando sono:

--default-key $name$ 
      Use $name$ as the default key to sign with. If this option is not used, the default key is 
      the first key found in the secret keyring. Note that -u or --local-user overrides this 
      option. 
--local-user $name$ 
    -u  Use $name$ as the key to sign with. Note that this option overrides --default-key. 

o, eventualmente:

--recipient $name$ 
    -r  Encrypt for user id $name$. If this option or --hidden-recipient is not specified, 
      GnuPG asks for the user-id unless --default-recipient is given. 
--default-recipient $name$ 
      Use $name$ as default recipient if option --recipient is not used and don't ask if 
      this is a valid one. $name$ must be non-empty. 

Questi possono essere utilizzati per specificare chi è il destinatario previsto, ad esempio, quale chiave pubblica utilizzare per la firma/crittografia. Quando decrittografa i file, GnuPG seleziona automaticamente la chiave corretta se esiste nel portachiavi corrente, che può essere selezionato con l'opzione --keyring, se esistono più. GnuPG può anche essere configurato per recuperare le chiavi necessarie da un server delle chiavi se sono disponibili lì.

Potresti essere interessato anche all'opzione --batch che assicura che non vengano poste domande interattive durante l'esecuzione.

Suggerisco di leggere la pagina man di GnuPG. Ci sono molte opzioni che potrebbero essere utili di tanto in tanto.

+0

Grazie, sì ho letto la pagina man (e ** mi sono perso **). Ho provato questo comando: '/ usr/bin/gpg2 -v --decrypt --default-key" private-1.pgp "/ full/home/my-file.7z.pgp' ma ho ottenuto questo' gpg: public chiave è 745ECDED gpg: crittografato con chiave RSA, ID 745ECDED gpg: decrittografia non riuscita: nessuna chiave segreta ... ... cura di condividere un comando di esempio per favore? Grazie in anticipo! – TheDude

+0

Ho anche utilizzato l'opzione '--local-user' e il percorso completo per il file della chiave privata, ma non ha aiutato – TheDude

+1

Potrebbe essere che la chiave non sia stata trovata nel portachiavi. Non sono completamente sicuro di poter dare la chiave in quel modo. Prova a importare prima la chiave sul portachiavi con 'gpg --allow-secret-key-import --import private-1.pgp' e poi decifrare con esso:' gpg --decrypt my-file.7z.pgp'.Se questo non funziona, prova dalla riga di comando, non da php, per escludere problemi con le variabili di ambiente, ecc. Un'altra opzione è che c'è qualcosa di sbagliato nel file chiave. – Edu

Problemi correlati