2010-04-22 41 views
6

Estoy tratando de cifrar archivos usando mi clave privada (en formato ascii) y cualquier otra clave pública (también en formato ascii). La biblioteca BouncyCastle parece ser la correcta, pero no puedo encontrar documentación para C#. ¿Alguien podría ayudarme con un ejemplo? Gracias.Necesito ejemplo para el cifrado de archivos BouncyCastle PGP en C#

+0

tal vez yo no estoy entendiendo correctamente PGP, al cifrar un archivo qué sólo el uso público de la tercera parte de ¿llave? Ninguna parte de tu clave privada se usa en el proceso, ¿correcto? Si es así, debo cambiar mi pregunta a "Ejemplo: cómo cifrar con clave pública de terceros y firmar con clave privada" –

+0

Lo mismo ocurre con cualquier criptografía asimétrica: usa clave pública para encriptación y verificación de firma, y ​​clave privada se usa para firmar y descifrar. –

Respuesta

12

Aquí hay un código del ejemplo de BouncyCastle. Debes tomar el código fuente y buscar en las pruebas unitarias, que contienen ejemplos. Descubrí que los recursos de Java también son útiles. El ejemplo se puede encontrar en el origen bajo cripto \ test \ src \ openpgp \ ejemplos \ 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

++ Gracias. Tenía problemas para localizar los ejemplos. – John

Cuestiones relacionadas