0

我们的应用程序使用改编自 KeyBasedFileProcessor.cs 的东西解密 pgp 加密的文件,类似于这个。通常,这可以正常工作,但我们遇到了某些文件的问题。有问题的代码如下:

if (message is PgpLiteralData)
{
   PgpLiteralData ld = (PgpLiteralData)message;
    Stream fOut = File.Create(ld.FileName);
                        Stream unc = ld.GetInputStream();
                        Streams.PipeAll(unc, fOut);
                        fOut.Close();
}
else if (message is PgpOnePassSignatureList)
{
    throw new PgpException("encrypted message contains a signed message - not literal data.");
}
else
{ 
    // the code goes here and throw this exception, when I debug, message is of type PgpMarker
    throw new PgpException("message is not a simple encrypted file - type unknown.");
}

在这部分,我相信代码需要 PgpLiteralData。但是我们得到了 PgpMarker,这会导致抛出异常。为什么会有 PgpMarker?如何找到 PgpLiteralData 代替?

4

1 回答 1

3

解决方案是简单地忽略 PgpMarker 对象并继续阅读下一个。OpenPGP 规范对标记包有这样的说法:

PGP 的实验版本使用此数据包作为 Literal 数据包,但没有发布的 PGP 版本生成带有此标记的 Literal 数据包。在 PGP 5.x 中,此数据包已被重新分配并保留用作标记数据包。

此数据包的主体包括:

 - The three octets 0x50, 0x47, 0x50 (which spell "PGP" in UTF-8).

这样的数据包在收到时必须被忽略。它可以放置在使用 PGP 2.6.x 中不可用的功能的消息的开头,以使该版本报告需要更新的软件来处理该消息。

于 2013-07-22T17:32:58.043 回答