2010-04-22 4 views
6

Я пытаюсь зашифровать файлы с помощью личного ключа (в формате ascii) и любого другого открытого ключа (также в формате ascii). Библиотека BouncyCastle выглядит правильно, но я не могу найти документацию для C#. Может ли кто-нибудь помочь мне с примером. Спасибо.Необходимый пример для шифрования файлов BouncyCastle PGP в C#

+0

может быть, я не понимающих PGP правильно, когда вы зашифровать файл вы использовать только общественности 3-го участника, ключ? Никакая часть вашего личного ключа не используется в процессе, правильно? Если это так, мне нужно изменить свой вопрос на «Пример: как шифровать сторонний открытый ключ и подписывать его с помощью закрытого ключа» –

+0

Это так с любой асимметричной криптографией - вы используете открытый ключ для проверки шифрования и подписи, а также закрытый ключ используется для подписи и дешифрования. –

ответ

12

Вот несколько примеров из примера BouncyCastle. Вы должны взять исходный код и посмотреть в модульных тестах, они содержат примеры. Я обнаружил, что ресурсы Java также полезны. Пример можно найти в источнике под криптография \ Test \ SRC \ OpenPGP \ Примеры \ 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

++ Спасибо. У меня возникли проблемы с поиском примеров. – John

Смежные вопросы