问题描述
我正在尝试使用 C# 来解密从我们的合作伙伴那里收到的音频文件。我发现的每个代码示例都假设遇到的第一个或第二个 PgpObject
是 PpgEncryptedDataList
类型,但我遇到的是 PgpExperimental
类型。
以下是 C# 代码片段:
public static void Decrypt(Stream inputStream,Stream privateKeyStream,string passphrase,string outputFile)
{
try
{
PgpObjectFactory pgpF = null;
PgpEncryptedDataList enc = null;
PgpObject o = null;
PgpPrivateKey sKey = null;
PgpPublicKeyEncryptedData pbe = null;
PgpSecretKeyRingBundle pgpSec = null;
pgpF = new PgpObjectFactory(PgpUtilities.GetDecoderStream(inputStream));
pgpSec = new PgpSecretKeyRingBundle(PgpUtilities.GetDecoderStream(privateKeyStream));
o = pgpF.NextPgpObject();
if (o is PgpEncryptedDataList)
enc = (PgpEncryptedDataList)o;
else
enc = (PgpEncryptedDataList)pgpF.NextPgpObject(); // Exception thrown here
// decrypt
foreach (PgpPublicKeyEncryptedData pked in enc.GetEncryptedDataObjects())
{
sKey = FindSecretKey(pgpSec,pked.KeyId,passphrase.tochararray());
if (sKey != null)
{
pbe = pked;
break;
}
}
这会引发异常 invalid header encountered
。调试时,遇到的第一个对象是 PgpExperimental
,我不知道如何处理它。有什么建议吗?
对于某些背景,文件是通过 GnuPG 加密的,我可以通过 PGP 桌面手动解密文件,所以我知道它是一个有效文件。我能够重新加密手动解密的文件并通过上面的代码成功解密,所以我知道它可以工作。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)