我正在尝试使用 BouncyCastle 在 C# 中解密 PGP 音频文件,但遇到了一个实验数据包

问题描述

我正在尝试使用 C# 来解密从我们的合作伙伴那里收到的音频文件。我发现的每个代码示例都假设遇到的第一个或第二个 PgpObjectPpgEncryptedDataList 类型,但我遇到的是 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 (将#修改为@)