2017-10-13 5 views
2

J'utilise des châteaux gonflables pour compresser et crypter certaines données. La méthode compress échoue avec une exception de référence null. La méthode suivante effectue la compression:PGP Compresser et crypter

private byte[] Compress(byte[] data) 
     { 
      using (MemoryStream outStream = new MemoryStream()) 
      { 
       PgpCompressedDataGenerator pgpCompressedDataGenerator = new PgpCompressedDataGenerator(CompressionAlgorithmTag.Zip); 
       using (Stream compressedStream = pgpCompressedDataGenerator.Open(outStream)) 
       { 
        PgpLiteralDataGenerator pgpLiteralDataGenerator = new PgpLiteralDataGenerator(); 

        using (Stream literalDataStream = pgpLiteralDataGenerator.Open(compressedStream, PgpLiteralData.Binary, null, data.Length, DateTime.UtcNow)) 
        { 
         literalDataStream.Write(data, 0, data.Length); 

         literalDataStream.Close(); 

         pgpCompressedDataGenerator.Close(); 

         return outStream.ToArray(); 
        } 
       } 
      } 
     } 

La ligne suivante provoque l'exception de référence en vrac:

pgpLiteralDataGenerator.Open(compressedStream, PgpLiteralData.Binary, null, data.Length, DateTime.UtcNow)) 

Cependant, je ne sais pas pourquoi - si je quitte la compression sur la partie de chiffrement fonctionne comme prévu. Ai-je besoin d'une autre bibliothèque pour effectuer la compression,

Mark

Répondre

1

Il se trouve le paramètre nul dans l'appel ci-dessous a été l'origine du problème:

pgpLiteralDataGenerator.Open(compressedStream, PgpLiteralData.Binary, null, data.Length, DateTime.UtcNow)) 

Ce code est une copie directe d'un autre projet Cependant, dans ce projet, l'API Bouncy Castles a été introduite avec iTextSharp - je suppose qu'il y a une légère différence dans la mise en œuvre.