2009-03-03 8 views
1

다음 SignedXml 코드가 있습니다. 이 코드는 .NET 1.1에서 완벽하게 작동하지만 .NET 3.5에서이 메서드를 실행하면 signedXml.CheckSignature() 메서드가 false를 계속 반환합니다. SignedXml 클래스와 관련하여 .Net 1.1과 3.5 사이에서 변경된 사항이 있습니까? 나는 여기에 puzzeled 해요! 너희들이 여기서 나를 도울 수 있니?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 서명 된 xml을 2.0 응용 프로그램에로드 할 수있었습니다.

그냥 전부의 KeyInfo를 제거 :

string returnXml = null; 
    if (signedXml.CheckSignature(dsaKeyPair)) 
    { 
     XmlElement dataElement = signedXml.GetIdElement(xmlDocument, "LicenseElement"); 
     returnXml = dataElement.InnerXml; 
    } 
관련 문제