SignedXml.CheckSignature работает в .NET 1.1, но не работает в .NET 3.5 - PullRequest
1 голос
/ 03 марта 2009

У меня есть следующий код 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;
        }

1 Ответ

0 голосов
/ 25 февраля 2010

Я обнаружил, что signatureXml.KeyInfo = keyInfo; была проблема для меня. Когда я использовал ключ в качестве аргумента для CheckSignature (), он работал - я смог загрузить XML-подпись 1.1 в приложении 2.0.

Просто удалите KeyInfo:

  string returnXml = null;
    if (signedXml.CheckSignature(dsaKeyPair))
    {
        XmlElement dataElement = signedXml.GetIdElement(xmlDocument, "LicenseElement");
        returnXml = dataElement.InnerXml;
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...