подписан Xml .load Xml ((XmlElement) Nodelist [0]); возвращает неправильно сформированное SignedInfo / Reference - PullRequest
0 голосов
/ 05 марта 2020

Я занимаюсь разработкой этого консольного приложения в течение примерно 2-3 месяцев.

Чего я пытаюсь добиться с помощью консольного приложения, это сгенерировать файлы данных и подписать файлы в " подпись. xml "файл. Он работает, используя несколько пользовательских методов для подписи (без использования ключа Regedit).

Однако, когда количество ссылок превышает 99, он отказывается подписывать и выдает ошибку «Malformed SignedInfo / Reference ..» , Хотя раньше это сработало, и эта ошибка никогда не появлялась.

Я пробовал поискать и искать решения, но безрезультатно подписать более двадцати ссылок. Обратите внимание, что в файле сигнатуры нет синтаксической ошибки или опечатки, она генерируется точно так же, как это было, когда он находится под 100 ссылками на файл.

Также нет плохих ха * Сгенерировано 1018 * файлов, так что я действительно понятия не имею, что пошло не так. Не обнаружено исключений при получении ha sh и путей к файлам сгенерированных файлов, которые должны быть подписаны.

Я надеюсь, что сообщество сможет помочь: (

Фрагмент код:

private static byte[] GetC14NDigest(XmlDocument xmlDocument, HashAlgorithm hash)
{
    try
    {
        byte[] digestedSignedInfo;
        XmlDocument containingDocument = xmlDocument;
        XmlElement context = xmlDocument.DocumentElement;

        XmlNodeList nodeList = xmlDocument.GetElementsByTagName("Signature");
        SignedXml signedXml = new SignedXml();
        signedXml.LoadXml((XmlElement)nodeList[0]);

        string baseUri = (containingDocument == null ? null : containingDocument.BaseURI);
        XmlResolver resolver = new XmlSecureResolver(new XmlUrlResolver(), baseUri);
        XmlDocument doc = PreProcessElementInput(signedXml.SignedInfo.GetXml(), revolver, baseUri);

        Transform c14nMethodTransform = signedXml.SignedInfo.CanonicalizationMethodObject;
        digestedSignedInfo = c14nMethodTransform.GetDigestedOutput(hash);
        return digestedSignedInfo;    
    }
    catch(Exception ex)
    {
        Log.LogText(ex.Message);
        Log.LogText(ex.StackTrace);
        return null;
    }
}
...