2010-10-15 11 views
5

शुरू हो जाओ मैं क्रिप्टोग्राफीसाथ BouncyCastle क्रिप्टो dll C#

साथ स्टार्टर मैं सी # के लिए BouncyCastle .dll का उपयोग करना चाहते woul हूँ, लेकिन मैं प्रलेखन और उदाहरण नहीं मिला सकते हैं।

कण में मुझे पीकेसीएस # 7 (.p7m परिणाम) के साथ फ़ाइलों पर हस्ताक्षर करने के लिए उपयोग करने की आवश्यकता है और उन्हें विश्वसनीय सर्वर (.m7m परिणाम) से आरएफसी 3161-अनुरूप, टाइम टिकटें जोड़ें।

कोई यह सुझाव दे सकता है कि मुझे ऐसा करने के लिए उदाहरण और दस्तावेज़ीकरण कहां मिल सकता है?

पहले से

धन्यवाद

सादर

उत्तर

6

मैं एक साथ एक और सवाल #SO पर यहाँ के लिए इस छोटे से उदाहरण रखा है, लेकिन यह भी आपके साथ ही लागू होता है:

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; 
     } 
    } 
} } 

आशा इस मदद करता है।

मैंने इसे on my blog भी पोस्ट किया।

+0

छोटा नोट: आउटस्ट्रीम, क्रिप्टोस्ट्रीम और बिनवाइटर में उपयोग करना है। पी 7 एम फ़ाइल अन्यथा के अंदर किसी भी डेटा के बिना बनाई गई है – oleksa

+0

कोई विचार जहां मुझे कुछ दस्तावेज या ट्यूटोरियल मिल सकता है? मैं ब्लॉक सिफर मोड को लागू करने की कोशिश कर रहा हूं जैसे कि। ईसीबी, सीबीसी, सीटीआर जो उछाल वाले महल द्वारा समर्थित हैं; निर्मित नेट। सीटीआर का समर्थन नहीं करता है। कृपया मुझे बताएं कि उछाल वाले महल के लिए कुछ डॉक्टर उपलब्ध हैं या नहीं। – SutharMonil

संबंधित मुद्दे