2009-03-03 23 views
1

次のSignedXmlコードがあります。このコードは.NET 1.1では完全に機能しますが、.NET 3.5でこれを実行すると、signedXml.CheckSignature()メソッドはfalseを返すことになります。 SignedXmlクラスに関して、.Net 1.1と3.5の間で何か変更がありましたか?私はここに困惑している!あなたはここで私を助けてくれますか?SignedXml.CheckSignatureは.NET 1.1では動作しますが.NET 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; 
     } 

答えて

0

私はsignedXml.KeyInfo = keyInfoを見つけました。私にとっては問題でした。私がCheckSignature()の引数としてキーを使用したとき、それはうまくいきました。2.0のアプリケーションで1.1のsigned xmlをロードすることができました。

だけで完全にするKeyInfoを削除:

string returnXml = null; 
    if (signedXml.CheckSignature(dsaKeyPair)) 
    { 
     XmlElement dataElement = signedXml.GetIdElement(xmlDocument, "LicenseElement"); 
     returnXml = dataElement.InnerXml; 
    } 
関連する問題