Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Bouncy castle错误:无法将RsaPrivateCrtKeyParameters类型的对象强制转换为ElGamalKeyParameters类型_C#_Bouncycastle_Public Key Encryption_Elgamal - Fatal编程技术网

C# Bouncy castle错误:无法将RsaPrivateCrtKeyParameters类型的对象强制转换为ElGamalKeyParameters类型

C# Bouncy castle错误:无法将RsaPrivateCrtKeyParameters类型的对象强制转换为ElGamalKeyParameters类型,c#,bouncycastle,public-key-encryption,elgamal,C#,Bouncycastle,Public Key Encryption,Elgamal,我在使用Bouncy Castle解密GPG文件时遇到困难。我有加密文件,我有私钥和私钥密码。我可以使用桌面软件GPG4win Kleopatra成功解密该文件,因此我拥有正确的私钥,并且gpg文件有效 但是,当我们的应用程序到达试图使用Bouncy Castle解密数据的代码行时,我收到以下错误: Unable to cast object of type 'Org.BouncyCastle.Crypto.Parameters.RsaPrivateCrtKeyParameters' to ty

我在使用Bouncy Castle解密GPG文件时遇到困难。我有加密文件,我有私钥和私钥密码。我可以使用桌面软件GPG4win Kleopatra成功解密该文件,因此我拥有正确的私钥,并且gpg文件有效

但是,当我们的应用程序到达试图使用Bouncy Castle解密数据的代码行时,我收到以下错误:

Unable to cast object of type 'Org.BouncyCastle.Crypto.Parameters.RsaPrivateCrtKeyParameters' to type 'Org.BouncyCastle.Crypto.Parameters.ElGamalKeyParameters'.
我正在使用Kleopatra的同一私钥解密同一个文件,所以我可以通过将私钥文件更改为预期格式或在Bouncy Castle中设置一些选项来解决这个问题

私钥文件是以以下行开头的纯文本文件:

-----BEGIN PGP PRIVATE KEY BLOCK-----
Version: GnuPG v2.0.17 (MingW32)
这是解密代码的一个扁平化版本。如果我遗漏了什么,请道歉:

PgpEncryptionKeys encryptionKeys = new PgpEncryptionKeys(publicKey, privateKey, passPhrase);

Stream encryptedStream = new StreamReader(encryptedFileName).BaseStream;
Stream encodedFile = PgpUtilities.GetDecoderStream(inputStream);

PgpObjectFactory factory = new PgpObjectFactory(encodedFile);
PgpObject pgpObject = factory.NextPgpObject();

PgpEncryptedDataList encryptedDataList;
if (pgpObject is PgpEncryptedDataList)
{
    encryptedDataList = (PgpEncryptedDataList)pgpObject;
}
else
{
    encryptedDataList = (PgpEncryptedDataList)factory.NextPgpObject();
}

PgpPublicKeyEncryptedData myEncryptedData = null;
PgpPublicKeyEncryptedData publicKeyED = null;
foreach (PgpPublicKeyEncryptedData encryptedData in encryptedDataList.GetEncryptedDataObjects())
{
    if (encryptedData != null)
    {
        myEncryptedData = encryptedData;
        break;
    }
}

Stream clearStream = myEncryptedData.GetDataStream(privateKey);
PgpObjectFactory clearFactory = new PgpObjectFactory(clearStream);

PgpObject message = clearFactory.NextPgpObject();
if (message is PgpCompressedData)
{
    message = ProcessCompressedMessage(message);
    PgpLiteralData literalData = (PgpLiteralData)message;
    using (Stream outputFile = File.Create(outputFilePath))
    {
        using (Stream literalDataStream = literalData.GetInputStream())
        {
            Streams.PipeAll(literalDataStream, outputFile);
        }
    }
}
此行出现异常:

Stream clearStream = myEncryptedData.GetDataStream(privateKey);
我希望你能给我一些建议让我试试。我可以提供我可能遗漏的任何进一步细节


谢谢

你能在使用BouncyCastle的地方显示代码吗?我已更新以显示代码。我已经删除了所有的函数调用,等等。我遇到了同样的问题:如果有一个新的函数调用,那将是一件非常美好的事情。@DaveBeta-你知道如何解决这个问题了吗?我也有同样的问题,我使用新生成的密钥暂时修复了这个问题。他们工作了两周,现在问题又出现了。