2017-10-13 183 views
2

我使用Bouncy Castles來壓縮和加密一些數據。該壓縮方法失敗並出現空引用異常。下面的方法進行壓縮:PGP壓縮和加密

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(); 
        } 
       } 
      } 
     } 

以下行導致大量引用異常:

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

但是我不知道爲什麼 - 如果我離開了壓縮,加密部分按預期工作。我需要另一個庫進行壓縮,

馬克

回答

1

原來空參數調用下面是造成問題:

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

此代碼是從另一個項目的直接拷貝,但是在那個項目中,Bouncy Castles API被引入了iTextSharp--我假設在實現方面存在細微差別。