我有以下SignedXml代码。这段代码在.NET 1.1中运行得很好,但是当我在.NET 3.5中运行它时,signedXml.CheckSignature()方法一直返回false。关于SignedXml 的类,在.Net 1.1和3.5之间做了一些改变吗?--我在这里很困惑!你们能帮帮我吗?
SignedXml signedXml = new SignedXml();
// Get public key
Assembly assembly = Assembly.LoadFile("MyLib.Application.dll");
Stream keyStream =
assembly.GetManifestResourceStream("MyKey.xml");
StreamReader keyReader = new StreamReader(keyStream, Encoding.UTF8);
string publicKeyXml = keyReader.ReadToEnd();
keyReader.Close();
// Load and set key
DSA dsaKeyPair = DSA.Create();
dsaKeyPair.FromXmlString(publicKeyXml);
KeyInfo keyInfo = new KeyInfo();
keyInfo.AddClause(new DSAKeyValue(dsaKeyPair));
signedXml.KeyInfo = keyInfo;
// Load and set data
XmlDocument xmlDocument = new XmlDocument();
xmlDocument.PreserveWhitespace = true;
xmlDocument.LoadXml(signedXmlData);
XmlNodeList nodeList = xmlDocument.GetElementsByTagName("Signature");
signedXml.LoadXml((XmlElement)nodeList[0]);
string returnXml = null;
if (signedXml.CheckSignature())
{
XmlElement dataElement = signedXml.GetIdElement(xmlDocument, "LicenseElement");
returnXml = dataElement.InnerXml;
}发布于 2010-02-24 23:33:55
我发现signedXml.KeyInfo = keyInfo;是我的问题所在。当我使用键作为CheckSignature()的参数时,它起了作用--我能够在一个2.0应用程序中加载1.1SignedXML。
只需完全删除KeyInfo:
string returnXml = null;
if (signedXml.CheckSignature(dsaKeyPair))
{
XmlElement dataElement = signedXml.GetIdElement(xmlDocument, "LicenseElement");
returnXml = dataElement.InnerXml;
}https://stackoverflow.com/questions/606091
复制相似问题