2009-07-31 5 views
2

Wie Datei mit dem öffentlichen Schlüssel, der zum aktuellen Schlüsselring hinzugefügt wurde, mit C# und Befehlszeile verschlüsseln?PGP Freeware und C#

Danke.

+0

Nicht sicher, was Sie mit "folgenden Schlüsselring" meinen. –

+0

Ich vermute, das ist eine Sprachbarriere Sache. – Randolpho

Antwort

1

Sie können meine Implementierung verwende ich vor einem Jahr geschrieben. Ich weiß, dass es ein bisschen hässlich ist.

Sie benötigen pgp.exe und einige Hintergrundinformationen darüber. siehe my blog post.

/// <summary> 
     /// Encryps given file using PGP Public Key 
     /// </summary> 
     /// <param name="filename"></param> 
     public string Encrypt(string filename, bool isBinary, ref string outstr){ 

      string outputfilename = filename; 


      //We use stringbuilder for performance considerations 
      StringBuilder sb = new StringBuilder(); 
      sb.Append("/c "); 
      sb.Append(""); 
      sb.Append(PGPLocation); 
      sb.Append(" +force -es "); 
      sb.Append("\""); 
      sb.Append(filename); 
      sb.Append("\" "); 
      sb.Append(ToUserName); 
      sb.Append(" -u "); 
      sb.Append(MyUserName); 

      sb.Append(" -z "); 
      sb.Append(PassPhrase); 
      sb.Append(" "); 

      // Use binary indicator because PGP produces different outputs for binary and plain text files 
      if (isBinary) 
       sb.Append("-a"); 

      proc.StartInfo.Arguments = sb.ToString(); 


      //proc.StartInfo.Arguments = "/c pgp +force -es "+filename+" cumacam -u bugra"; 


      proc.Start(); 
      if (WaitForInfinity) 
       proc.WaitForExit(); 
      else 
       proc.WaitForExit(WaitTime); 
      //string res = proc.StandardOutput.ReadToEnd(); 

      outstr = proc.StartInfo.Arguments; 
      if (proc.HasExited) 
      { 
       int ab = proc.ExitCode; 
       if (ab != 0) 
       { 
        FireError(Convert.ToInt32(ErrorTypes.PGPEncryptError), "Erro No: " + ab.ToString() + "in PGP. Details: "+" "+proc.StandardOutput.ReadToEnd()); 
        return null; 
       } 
       else 
        if (!isBinary) 
         return outputfilename+".pgp"; 
       return outputfilename + ".asc"; 
      } 

      return null; 
     } 
+0

Danke ercu! Du hast alle meine Fragen beantwortet. Ryou Blog lesen. – iburlakov

1

Sie können gnupg-sharp verwenden, solange Sie mit der GPL und GnuPG in Ordnung sind.

+0

Beachten Sie, dass gnupg-sharp ein Wrapper um das Befehlszeilendienstprogramm ist und daher das Befehlszeilendienstprogramm installiert werden muss. – Randolpho

+1

Das stimmt, aber Sie benötigen keine vollständige Installation auf dem Client. Nur gpg.exe und iconv.dll reichen - das können Sie mit Ihrer Anwendung installieren. Es sind auch keine Änderungen an der Registrierung erforderlich. –

4

Nun, die bouncy castle cryptography library für C# kann verwendet werden, um PGP zu verschlüsseln und zu entschlüsseln; Es ist das, was wir intern für die PGP-Krypto-Arbeit verwenden. Es ist vollständig unabhängig, also keine Abhängigkeiten von vorhandenen Programmen oder Bibliotheken.

Beachten Sie jedoch, dass es sich um eine Bibliothek und kein Befehlszeilenprogramm handelt. Der Quellcode enthält einige Befehlszeilenprogramm-Dienstprogramme, die Sie erstellen können, wenn Sie CLI verwenden müssen.

+0

können Sie mir ein Beispiel zum Entschlüsseln einer PGP-Datei mit Hüpfburg zeigen? Ich konnte keine Beispiele in den Downloads finden. –

1
+1

"Keiner von uns hat jemals ein Programm in einer .NET-Sprache geschrieben, aber wir wollten beide es lernen. Also haben wir uns für C# entschieden." - Zwei Studenten experimentelles Projekt inspiriert leider nicht viel Vertrauen (egal wie groß der Code ist, wo ist die Community Adoption und Überprüfung ...) – piers7