为什么将 FileStream 传递给 PGP 解密函数有效,但不能传递给 MemoryStream?

Why does passing a FileStream to a PGP Decryption function work but not a MemoryStream?

我正在尝试通过内存流解密 PGP 加密文本。因为 PgpCore NuGet 包采用通用 Stream 对象,所以我希望 MemoryStream 能够工作。相反,我收到了像 "unknown object in stream 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 之间有何不同?

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

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

new MemoryStream(File.ReadAllBytes(file));