2016-08-11 3 views
0

Ich versuche, einen benutzerdefinierten Wrapper für GnuPG zu erstellen.Wie kann ich einen Prozess schreiben, um --gen-key von GnuPG ohne die zusätzlichen Schritte aufzurufen?

Ich habe für sehr einfache gpg Befehle wie , --version usw.

Aber für einige feine so weit zu tun, dass ich zusätzliche Schritte erfordern kann nicht herausfinden, wie es zu trainieren, wie für --gen-key, Es gibt mehrere Schritte von der Auswahl des Verschlüsselungsalgorithmus bis zur E-Mail des Schlüsselpaarbesitzers. Wie kann ich dies mithilfe von System.Diagnostics.Process erreichen? Hier ist ein einfacher Code von einem aktuellen, der bereits funktioniert.

protected const string GpgExe = "gpg"; 

    protected Process GetProcess(string arguments) 
    { 
     ProcessStartInfo info = new ProcessStartInfo 
     { 
      FileName = GpgExe, 
      Arguments = arguments, 
      CreateNoWindow = true, 
      UseShellExecute = false, 
      RedirectStandardOutput = true, 
      RedirectStandardError = true, 
      RedirectStandardInput = true 
     }; 

     Process process = new Process { StartInfo = info }; 
     return process; 
    } 

    public string GetVersion() 
    { 
     string version = ""; 

     string arguments = "--version"; 

     using (var process = this.GetProcess(arguments)) 
     { 
      process.Start(); 
      version = process.StandardOutput.ReadLine(); 
      process.Close(); 
     } 

     return version; 
    } 

Antwort

1

Anstatt zu versuchen, gegen eine interaktive Eingabeaufforderung zu programmieren (das durch das Parsen der GnuPG stdout möglich sein sollte, und anschließend die passende Eingabe bereitstellt), verwenden GnuPG's unattended key generation capabilities für solche Fälle vorgesehen.

Die verlinkte Dokumentationsseite bietet ein kleines Beispiel, präsentiert die ziemlich einfach Syntax zu verstehen:

$ cat >foo <<EOF 
    %echo Generating a basic OpenPGP key 
    Key-Type: DSA 
    Key-Length: 1024 
    Subkey-Type: ELG-E 
    Subkey-Length: 1024 
    Name-Real: Joe Tester 
    Name-Comment: with stupid passphrase 
    Name-Email: [email protected] 
    Expire-Date: 0 
    Passphrase: abc 
    %pubring foo.pub 
    %secring foo.sec 
    # Do a commit here, so that we can later print "done" :-) 
    %commit 
    %echo done 
EOF 
$ gpg2 --batch --gen-key foo 
[...] 
$ gpg2 --no-default-keyring --secret-keyring ./foo.sec \ 
     --keyring ./foo.pub --list-secret-keys 
/home/wk/work/gnupg-stable/scratch/foo.sec 
------------------------------------------ 
sec 1024D/915A878D 2000-03-09 Joe Tester (with stupid passphrase) <[email protected]> 
ssb 1024g/8F70E2C0 2000-03-09 
Verwandte Themen