PGP压缩和加密

时间:2017-10-13 20:12:14

标签: c# bouncycastle pgp

我正在使用Bouncy Castles来压缩和加密某些数据。 compress方法因null引用异常而失败。以下方法执行压缩:

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 个答案:

答案 0 :(得分:1)

事实证明,下面调用中的null参数导致了问题:

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

此代码是来自另一个项目的直接副本,但是在该项目中,Bouncy Castles API是通过iTextSharp引入的 - 我假设实现中存在细微差别。