C# Bouncy castle错误:无法将RsaPrivateCrtKeyParameters类型的对象强制转换为ElGamalKeyParameters类型
我在使用Bouncy Castle解密GPG文件时遇到困难。我有加密文件,我有私钥和私钥密码。我可以使用桌面软件GPG4win Kleopatra成功解密该文件,因此我拥有正确的私钥,并且gpg文件有效 但是,当我们的应用程序到达试图使用Bouncy Castle解密数据的代码行时,我收到以下错误: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
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-你知道如何解决这个问题了吗?我也有同样的问题,我使用新生成的密钥暂时修复了这个问题。他们工作了两周,现在问题又出现了。