【发布时间】:2017-10-30 05:31:08
【问题描述】:
我有一个 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,它会再次运行。
link 中的示例代码会重现错误,它会加密成功然后解密失败。
我正在使用 A3 证书,pendrive 令牌。有人遇到过这个问题吗? .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
【问题讨论】:
-
你有完整的堆栈跟踪吗?
-
客户是否完全重建?让客户在项目中复制 bin 文件夹。然后删除bin文件夹并重新编译。我怀疑错误是由于编译器中的依赖关系造成的。编译器对网络版本没有任何依赖关系,因此当安装新网络时,需要重新编译。编译器不会自动进行完整编译。
-
@jdweng 它甚至在我的开发机器上也失败了,我开始了一个新项目,粘贴了这个link的示例代码。解密失败。
-
我会首先比较 .proj 文件(它们是 ASCII),以确保没有更改设置。 VS 2013 更改了很多默认设置。 VS2013 将字符编码的默认值从 UTF8 更改为 Unicode,这可以解释这个问题。我认为问题在于 VS 而不是网络库。只需更改网络库一个完全重建的项目就可以了。升级 Net 时,Microsoft 偶尔会更改默认设置,但这是不寻常的。
-
我相当有信心这是一个 .net 框架问题。该程序是为 .NET 4.0 编译的。如果我复制到新安装了 .NET 4.6.2 的虚拟机,该程序将无法运行。如果在同一台机器上我删除 .net 框架并安装 4.5.2,程序将正常工作。我尝试重新编译程序以 .net 框架 4.6.2 为目标,我进行了干净的重建,但它仍然无法正常工作。该程序的旧版本于 2013 年编译,在 .NET 4.6.2 中也停止工作。
标签: c# xml encryption x509certificate2 encryption-asymmetric