首页 > 解决方案 > 为什么将 FileStream 传递给 PGP Decryption 函数而不是 MemoryStream?

问题描述

我正在尝试通过内存流解密 PGP 加密文本。因为 PgpCore NuGet 包采用通用 Stream 对象,所以我希望 MemoryStream 能够工作。相反,我收到了诸如“流 47 中的未知对象”之类的模糊错误。

我在网上查看了一堆资料表明编码是关键,但我只是得到不同编码的不同错误。当我使用 FileStream 对象对其进行测试时,解密函数运行良好并且没有问题。

这不起作用:

using var pgp = new PGP();
var fileStream = new MemoryStream(Encoding.Default.GetBytes(File.ReadAllText(file)));
var privateKeyStream = new MemoryStream(Encoding.Default.GetBytes(File.ReadAllText("prod")));
pgp.DecryptStream(fileStream, outputStream, privateKeyStream, "[redacted]");

这可以:

using var pgp = new PGP();
var fileStream = File.OpenRead(file);
var privateKeyStream = new MemoryStream(Encoding.Default.GetBytes(File.ReadAllText("prod")));
pgp.DecryptStream(fileStream, outputStream, privateKeyStream, "[redacted]");

我错过了什么?FileStream 和 MemoryStream 有什么区别,一个有效,另一个无效?

标签: c#encryptionbouncycastlepgpopenpgp

解决方案


Encoding.Default.GetBytes(File.ReadAllText(file))

这是读取文件的一种相当奇怪的方式,并且可能会引入一些编码问题。尝试改用这个:

new MemoryStream(File.ReadAllBytes(file));

推荐阅读