2010-04-22 9 views
6

Próbuję szyfrować pliki przy użyciu mojego klucza prywatnego (w formacie ASCII) i dowolnego innego klucza publicznego (również w formacie ASCII). Biblioteka BouncyCastle wygląda na prawidłową, ale nie mogę znaleźć dokumentacji dla języka C#. Czy ktoś mógłby mi pomóc z przykładem. Dziękuję Ci.Przykładowy przykład dla szyfrowania plików BouncyCastle PGP w C#

+0

Może nie jestem zrozumienie PGP poprawnie, gdy zaszyfrowania pliku należy użyć tylko do wiadomości publicznej 3. partii klawisz? Żadna część Twojego klucza prywatnego nie jest używana w procesie, prawda? Jeśli tak, potrzebuję zmienić moje pytanie na "Przykład: jak szyfrować kluczem zewnętrznym i podpisać kluczem prywatnym" –

+0

Tak samo jest z każdą kryptografią asymetryczną - używasz klucza publicznego do szyfrowania i weryfikacji podpisu oraz klucza prywatnego służy do podpisywania i odszyfrowywania. –

Odpowiedz

12

Oto kod z przykładu BouncyCastle. Powinieneś pobrać kod źródłowy i zajrzeć do testów jednostkowych, zawierają przykłady. Odkryłem, że zasoby Java są również przydatne. Przykład można znaleźć w źródle pod 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

++ Dzięki. Wystąpił problem z lokalizacją przykładów. – John

Powiązane problemy