2010-04-22 37 views
6

Tôi đang cố mã hóa các tệp bằng khóa riêng của tôi (theo định dạng ascii) và bất kỳ khóa công khai nào khác (cũng có định dạng ascii). Thư viện BouncyCastle trông giống như điều đúng để sử dụng, nhưng tôi không thể tìm thấy tài liệu cho C#. Bất cứ ai có thể vui lòng giúp tôi với một ví dụ. Cảm ơn bạn.Ví dụ về mã hóa tệp BouncyCastle PGP trong C#

+0

có thể tôi không hiểu PGP chính xác, khi bạn mã hóa tệp, bạn chỉ sử dụng công khai của bên thứ ba Chìa khóa? Không có phần nào của khóa riêng của bạn được sử dụng trong quá trình, đúng không? Nếu vậy, tôi cần thay đổi câu hỏi của mình thành "Ví dụ: cách mã hóa bằng khóa công khai của bên thứ 3 và ký bằng khóa riêng" –

+0

Nó như vậy với bất kỳ mật mã không đối xứng nào - bạn sử dụng khóa công khai để mã hóa và xác minh chữ ký. được sử dụng để ký và giải mã. –

Trả lời

12

Đây là một số mã trong ví dụ BouncyCastle. Bạn nên lấy mã nguồn và tìm trong các bài kiểm tra đơn vị, chúng có chứa các ví dụ. Tôi đã thấy rằng các tài nguyên Java cũng hữu ích. Ví dụ này có thể được tìm thấy trong nguồn dưới crypto \ test \ src \ openpgp \ examples \ PbeFileProcessor.cs

private static void EncryptFile(
     Stream outputStream, 
     string fileName, 
     char[] passPhrase, 
     bool armor, 
     bool withIntegrityCheck) 
    { 
     if (armor) 
     { 
      outputStream = new ArmoredOutputStream(outputStream); 
     } 

     MemoryStream bOut = new MemoryStream(); 

     PgpCompressedDataGenerator comData = new PgpCompressedDataGenerator(
      CompressionAlgorithmTag.Zip); 

     PgpUtilities.WriteFileToLiteralData(
      comData.Open(bOut), 
      PgpLiteralData.Binary, 
      new FileInfo(fileName)); 

     comData.Close(); 

     byte[] bytes = bOut.ToArray(); 

     PgpEncryptedDataGenerator cPk = new PgpEncryptedDataGenerator(
      SymmetricKeyAlgorithmTag.Cast5, withIntegrityCheck, new SecureRandom()); 

     cPk.AddMethod(passPhrase); 

     Stream cOut = cPk.Open(outputStream, bytes.Length); 

     cOut.Write(bytes, 0, bytes.Length); 

     cOut.Close(); 

     if (armor) 
     { 
      outputStream.Close(); 
     } 
    } 
+1

++ Cảm ơn. Tôi đã gặp sự cố khi tìm các ví dụ. – John

Các vấn đề liên quan