2009-03-03 24 views
1

'da başarısız oldu Aşağıda SignedXml kodu var. Bu kod, yalnızca .NET 1.1'de mükemmel çalışır, ancak .NET 3.5'te çalıştırdığımda, signedXml.CheckSignature() yöntemi yanlış döndürmeye devam eder. SignedXml sınıfıyla ilgili olarak, .Net 1.1 ile 3.5 arasında bir şey değişti mi? Burada puzzeled kulüpler! Bana yardım edebilir misiniz?SignedXml.CheckSignature .NET 1.1'de çalışır, ancak .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; 
     } 

cevap

0

SignedXml.KeyInfo = keyInfo; benim için sorun oldu. CheckSignature() için bir argüman olarak anahtarı kullandığında, o çalıştı - Bir 2.0 uygulamada 1.1 imzalı xml yükleyebildi.

Hemen tamamen KeyInfo kaldırın:

string returnXml = null; 
    if (signedXml.CheckSignature(dsaKeyPair)) 
    { 
     XmlElement dataElement = signedXml.GetIdElement(xmlDocument, "LicenseElement"); 
     returnXml = dataElement.InnerXml; 
    } 
İlgili konular