我有一个旧的函数,是在2013年编写的,它可以解密另一个程序加密的xml文件。
这段代码非常简单。
public static void Decrypt(XmlDocument Doc)
{
// Check the arguments.
if (Doc == null)
throw new ArgumentNullException("Doc");
// Create a new EncryptedXml object.
EncryptedXml exml = new EncryptedXml(Doc);
// Decrypt the XML document.
exml.DecryptDocument();
}
它之前一直非常好用,但最近我们的一些客户开始升级他们的4.6.2框架,所以DecryptDocument()方法停止工作了。现在它会抛出一个异常“算法组''无效”。如果我删除.net framework 4.6.2,它就又可以工作了。
这个链接中的示例代码会再现此错误,它会成功加密然后无法解密。
我正在使用A3证书,U盘令牌。有人遇到过这个问题吗?在.net 4.6.2中有任何解决方法吗?
编辑1:
堆栈跟踪:
at System.Security.Cryptography.CngAlgorithmGroup..ctor(String algorithmGroup)
at System.Security.Cryptography.CngKey.get_AlgorithmGroup()
at System.Security.Cryptography.RSACng..ctor(CngKey key)
at System.Security.Cryptography.X509Certificates.RSACertificateExtensions.GetRSAPrivateKey(X509Certificate2 certificate)
at System.Security.Cryptography.CngLightup.GetRSAPrivateKey(X509Certificate2 cert)
at System.Security.Cryptography.Xml.EncryptedXml.DecryptEncryptedKey(EncryptedKey encryptedKey)
at System.Security.Cryptography.Xml.EncryptedXml.GetDecryptionKey(EncryptedData encryptedData, String symmetricAlgorithmUri)
at System.Security.Cryptography.Xml.EncryptedXml.DecryptDocument()
at Criptografar.Program.Decrypt(XmlDocument Doc) in C:\Users\leoka\Documents\Visual Studio 2017\Projects\ConsoleApp4\Criptografar\Program.cs:line 152
at Criptografar.Program.Main(String[] args) in C:\Users\leoka\Documents\Visual Studio 2017\Projects\ConsoleApp4\Criptografar\Program.cs:line 83
cert.GetRSAPrivateKey()
。在其中告诉我们.Key.Algorithm
、.Key.AlgorithmGroup
和.Key.Provider
的相应值是什么。 - silkfire