2013-03-25 14 views
6

Ich versuche, eine Konsolenanwendung zu schreiben, die eine GPS-Signatur auf Anfrage entschlüsseln wird. Alles läuft gut, AUSSER für den Teil, wo es zur Eingabe meines GPG-Passworts auffordert. Wie rufe ich gpg --decrypt von der Befehlszeile ohne ein Kennwortdialog auf?Entschlüsselung einer GPG-Zeichenfolge von der Befehlszeile

Hier ist mein Code so weit:

var startInfo = new ProcessStartInfo("gpg.exe"); 
startInfo.Arguments = "--decrypt"; //this is where I want to insert "--passphrase MyFakePassword" 
startInfo.CreateNoWindow = true; 
startInfo.UseShellExecute = false; 
startInfo.RedirectStandardInput = true; 
startInfo.RedirectStandardOutput = true; 
startInfo.RedirectStandardError = true; 
startInfo.WorkingDirectory = @"C:\Program Files (x86)\GNU\GnuPG"; 

var proc = Process.Start(startInfo); 
var sCommandLine = stringData + "\n"+(char)26+"\n"; //stringData is the encrypted string 
proc.StandardInput.WriteLine(sCommandLine); 
proc.StandardInput.Flush(); 
proc.StandardInput.Close(); 

var result = proc.StandardOutput.ReadToEnd(); 

ich --passphrase MyFakePassword mit versucht haben, --passphrase-fd MyFakePassword und sogar --passphrase-fd 0 mit meinem Passwort auf der ersten Zeile der Eingabe. Ich möchte es vermeiden, mein Passwort in eine TXT-Datei auf dem Rechner zu legen, auf dem dieser Code läuft, wenn irgend möglich.

Vielen Dank im Voraus für jede Hilfe.

Antwort

2

Ich habe ein bisschen mehr graben. Vor ein paar Monaten hat jemand das als Fehler in Gpg4Win's Foren gemeldet. Die einzigen Lösungen zu diesem Zeitpunkt sind das Zurücksetzen von 2.1.0 auf eine frühere Version (in meinem Fall keine Option), das Deaktivieren des Kennworts für den Schlüssel oder das Einbinden von Text. Hier ist der Forenbeitrag: http://wald.intevation.org/forum/forum.php?thread_id=1116&forum_id=21&group_id=11 Es gibt keinen Kommentar vom Entwicklerteam.

+0

Dank dafür! Vergeudete Tage darauf. Das Herunterladen von ftp://ftp.gnupg.org/gcrypt/binary/gnupg-w32cli-1.4.9.exe und die Installation behebt das Problem für mich –

0

Hinweis: Dies ist ein Sicherheitsrisiko! Wie dem auch sei

,

Passwort bei der Anmeldung oder Entschlüsseln, wenn Sie symmetrische -Verschlüsselung verwenden. Die Manpage Dokumente die folgenden Optionen:


--passphrase String

Verwenden String als Passwort. Dies kann nur verwendet werden, wenn nur eine Passphrase angegeben wird. Offensichtlich ist dies bei einem Mehrbenutzersystem von sehr fragwürdiger Sicherheit. Verwenden Sie diese Option nicht , wenn Sie es vermeiden können.

--passphrase-fd n

Lesen der Kontrollwert aus Dateideskriptor n. Nur die erste Zeile wird vom Dateideskriptor n gelesen. Wenn Sie 0 für die Passphrase verwenden, wird von stdin gelesen. Dies kann nur verwendet werden, wenn nur eine Passphrase geliefert wird.

--passphrase-file file 

Lesen Sie die Passphrase aus der Datei. Nur die erste Zeile wird aus der Datei gelesen. Dies kann nur verwendet werden, wenn nur eine Passphrase angegeben wird. Offensichtlich ist eine in einer Datei gespeicherte Passphrase fraglich, wenn andere Benutzer diese Datei lesen können. Verwenden Sie diese Option nicht, wenn Sie sie vermeiden können.

Die offizielle pgp Kommandozeilenprogramm bietet diese Möglichkeit mit der Option -z:

pgp -esa $ QUELL $ RECIPIENTPUBLICKEY -u $ SENDERPRIVATEKEY -z $ passphrase

+0

Das sind alle richtigen Informationen, direkt aus der Dokumentation. Ich denke, ich hätte klarer sein sollen, dass ich die Dokumentation gelesen habe, aber die vorgeschriebene Lösung, --passphrase "MyFakePassword", funktioniert nicht. Der Grund dafür kann in meiner Antwort gefunden werden. – BilldrBot

1

das zu vermeiden Dialog Passwort versuche diese Methode, ich benutze sie und es hat perfekt funktioniert, du wirst mehr Details finden.

http://www.systemdeveloper.info/2013/11/decrypt-files-encrypted-with-gnupg-from.html

public static string DecryptFile(string encryptedFilePath) 
    { 
     FileInfo info = new FileInfo(encryptedFilePath); 
     string decryptedFileName = info.FullName.Substring(0, info.FullName.LastIndexOf('.')) + "Dec.TXT"; 
     string encryptedFileName = info.FullName; 

     string password = System.Configuration.ConfigurationManager.AppSettings["passphrase"].ToString(); 

     System.Diagnostics.ProcessStartInfo psi = new System.Diagnostics.ProcessStartInfo("cmd.exe"); 

     psi.CreateNoWindow = true; 
     psi.UseShellExecute = false; 
     psi.RedirectStandardInput = true; 
     psi.RedirectStandardOutput = true; 
     psi.RedirectStandardError = true; 
     psi.WorkingDirectory = @System.Configuration.ConfigurationManager.AppSettings["WorkingDirectory"].ToString(); 

     System.Diagnostics.Process process = System.Diagnostics.Process.Start(psi); 
     string sCommandLine = @"echo " + password + "|gpg.exe --passphrase-fd 0 --batch --verbose --yes --output " + decryptedFileName + @" --decrypt " + encryptedFileName; 

     process.StandardInput.WriteLine(sCommandLine); 
     process.StandardInput.Flush(); 
     process.StandardInput.Close(); 
     process.WaitForExit(); 
     //string result = process.StandardOutput.ReadToEnd(); 
     //string error = process.StandardError.ReadToEnd(); 
     process.Close(); 
     return decryptedFileName; 
    } 
3

Verwenden Sie die --batch --passphrase-fd Optionen zusammen, .EG gpg2 --batch --passphrase-fd 0 --armor --decrypt /path/to/encrypted_file.pgp

in Ihrem Code nach proc.StandardInput.WriteLine(sCommandLine); hinzufügen:

proc.StandardInput.WriteLine("your passphrase here"); 
proc.StandardInput.Flush(); 
Verwandte Themen