2010-10-15 3 views
5

Ich bin Starter mit KryptographieLassen Sie starten mit BouncyCastle Krypto dll C#

I BouncyCastle DLL für C# verwenden woul mögen, aber ich kann keine Dokumentation und Beispiele gefunden.

In besonders muss ich Dateien mit PKCS # 7 (.p7m Ergebnisse) zu signieren und zu ihnen RFC 3161 konforme Zeitstempel von vertrauenswürdigen Server (.m7m Ergebnisse) hinzufügen.

kann jemand vorschlagen, wo ich Beispiele und Dokumentation finden kann, um dies zu tun?

Dankbarkeitskreuzes im Voraus

Mit freundlichen Grüßen

Antwort

6

ich zusammen dieses kleine Beispiel für eine andere Frage hier auf #SO, aber es gilt für Sie auch:

using System; 
using System.IO; 
using System.Linq; 
using System.Windows.Forms; 
using Org.BouncyCastle.Cms; 
using Org.BouncyCastle.Pkcs; 
using Org.BouncyCastle.X509; 

namespace ConsoleApplicationSignWithBouncyCastle 
{ 
    class Program 
    { 

     [STAThread] 
     static void Main(string[] args) 
     { 

      try 
      { 
       // First load a Certificate, filename/path and certificate password 
       Cert = ReadCertFromFile("./test.pfx", "test"); 

       // Select a binary file 
       var dialog = new OpenFileDialog 
           { 
            Filter = "All files (*.*)|*.*", 
            InitialDirectory = "./", 
            Title = "Select a text file" 
           }; 
       var filename = (dialog.ShowDialog() == DialogResult.OK) ? dialog.FileName : null; 

       // Get the file 
       var f = new FileStream(filename, System.IO.FileMode.Open); 

       // Reading through this code stub to be sure I get it all :-) [ Different subject entirely ] 
       var fileContent = ReadFully(f); 

       // Create the generator 
       var dataGenerator = new CmsEnvelopedDataStreamGenerator(); 

       // Add receiver 
       // Cert is the user's X.509 Certificate set bellow 
       dataGenerator.AddKeyTransRecipient(Cert); 

       // Make the output stream 
       var outStream = new FileStream(filename + ".p7m", FileMode.Create); 

       // Sign the stream 
       var cryptoStream = dataGenerator.Open(outStream, CmsEnvelopedGenerator.Aes128Cbc); 

       // Store in our binary stream writer and write the signed content 
       var binWriter = new BinaryWriter(cryptoStream); 
       binWriter.Write(fileContent); 
      } 
      catch (Exception ex) 
      { 
       Console.WriteLine("So, you wanna make an exception huh! : " + ex.ToString()); 
       Console.ReadKey(); 
      } 
     } 

     public static byte[] ReadFully(Stream stream) 
     { 
      stream.Seek(0, 0); 
      var buffer = new byte[32768]; 
      using (var ms = new MemoryStream()) 
      { 
       while (true) 
       { 
        int read = stream.Read(buffer, 0, buffer.Length); 
        if (read <= 0) 
         return ms.ToArray(); 
        ms.Write(buffer, 0, read); 
       } 
      } 
     } 

     public static Org.BouncyCastle.X509.X509Certificate Cert { get; set; } 

     // This reads a certificate from a file. 
     // Thanks to: http://blog.softwarecodehelp.com/2009/06/23/CodeForRetrievePublicKeyFromCertificateAndEncryptUsingCertificatePublicKeyForBothJavaC.aspx 
     public static X509Certificate ReadCertFromFile(string strCertificatePath, string strCertificatePassword) 
     { 
      try 
      { 
       // Create file stream object to read certificate 
       var keyStream = new FileStream(strCertificatePath, FileMode.Open, FileAccess.Read); 

       // Read certificate using BouncyCastle component 
       var inputKeyStore = new Pkcs12Store(); 
       inputKeyStore.Load(keyStream, strCertificatePassword.ToCharArray()); 

       //Close File stream 
       keyStream.Close(); 

       var keyAlias = inputKeyStore.Aliases.Cast<string>().FirstOrDefault(n => inputKeyStore.IsKeyEntry(n)); 

       // Read Key from Alieases 
       if (keyAlias == null) 
        throw new NotImplementedException("Alias"); 

       //Read certificate into 509 format 
       return (X509Certificate)inputKeyStore.GetCertificate(keyAlias).Certificate; 
      } 
      catch (Exception ex) 
      { 
       Console.WriteLine("So, you wanna make an exception huh! : " + ex.ToString()); 
      Console.ReadKey(); 
      return null; 
     } 
    } 
} } 

Hoffnung, das hilft.

Ich auch gepostet on my blog.

+0

Kleiner Hinweis: Verwendung muss zu den OutStream, CryptoStream und binWriter hinzugefügt werden. P7M-Datei wird ohne Daten im Inneren erstellt, sonst – oleksa

+0

Irgendeine Idee, wo ich einige Dokumentation oder Tutorial finden könnte? Ich versuche, Blockchiffre-Modi viz zu implementieren. EZB, CBC, CTR, die von Hüpfburg unterstützt werden; Das eingebaute .net unterstützt die CTR nicht. Bitte sagen Sie mir, ob ein Dokument für die Hüpfburg verfügbar ist. – SutharMonil

Verwandte Themen