为什么将FileStream传给PGP解密函数可以工作,而将MemoryStream传给PGP解密函数却不行?

问题描述 投票:1回答:1

我试图通过一个内存流来解密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之间有什么不同,一个能用,另一个不能用?

c# encryption bouncycastle pgp openpgp
1个回答
0
投票

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

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

new MemoryStream(File.ReadAllBytes(file));
© www.soinside.com 2019 - 2024. All rights reserved.