Не могу найти, как рассчитать правильное DigestValue моего XML — С#

Мне нужно выполнить расчет дайджеста SignedInfo balise из моего XMLDocument. Предоставляемые инструкции: выполнить канонизацию XML в DataPDU (включая начальный и конечный теги DataPDU) и вычислить дайджест SHA256 канонизированного DataPDU. Добавьте его в тег DigestValue.

Это пример при условии, что я вставил lau.xml в UTF-8:

      <?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<Saa:DataPDU xmlns:Saa="urn:swift:saa:xsd:saa.2.0" xmlns:Sw="urn:swift:snl:ns.Sw" xmlns:SwGbl="urn:swift:snl:ns.SwGbl"
xmlns:SwInt="urn:swift:snl:ns.SwInt" xmlns:SwSec="urn:swift:snl:ns.SwSec">
    <Saa:Revision>2.0.14</Saa:Revision>
    <Saa:Header>
        <Saa:Message>
            <Saa:SenderReference>ISWHQBEBBXXX199test LAU$220908450</Saa:SenderReference>
            <Saa:MessageIdentifier>fin.199</Saa:MessageIdentifier>
            <Saa:Format>MT</Saa:Format>
            <Saa:SubFormat>Input</Saa:SubFormat>
            <Saa:Sender>
                <Saa:BIC12>SWHQBEBBAXXX</Saa:BIC12>
                <Saa:FullName>
                    <Saa:X1>SWHQBEBBXXX</Saa:X1>
                </Saa:FullName>
            </Saa:Sender>
            <Saa:Receiver>
                <Saa:BIC12>SWHQBEBBXXXX</Saa:BIC12>
                <Saa:FullName>
                    <Saa:X1>SWHQBEBBXXX</Saa:X1>
                    <Saa:FinancialInstitution>S.W.I.F.T. HEADQUARTERS</Saa:FinancialInstitution>
                    <Saa:CityName>LA HULPE</Saa:CityName>
                    <Saa:CountryCode>BE</Saa:CountryCode>
                </Saa:FullName>
            </Saa:Receiver>
            <Saa:InterfaceInfo>
                <Saa:MessageCreator>Messenger</Saa:MessageCreator>
                <Saa:MessageContext>Original</Saa:MessageContext>
                <Saa:MessageNature>Financial</Saa:MessageNature>
                <Saa:Sumid>1CE66DB2FFFFFE3D</Saa:Sumid>
            </Saa:InterfaceInfo>
            <Saa:NetworkInfo>
                <Saa:Priority>Normal</Saa:Priority>
                <Saa:IsPossibleDuplicate>false</Saa:IsPossibleDuplicate>
                <Saa:IsNotificationRequested>false</Saa:IsNotificationRequested>
                <Saa:Service>swift.fin</Saa:Service>
                <Saa:FINNetworkInfo>
                    <Saa:MessageSyntaxVersion>1805</Saa:MessageSyntaxVersion>
                    <Saa:FINUserHeader>{121:5cab77ec-066b-4d88-b0a5-f8464af45aa5}</Saa:FINUserHeader>
                    <Saa:E2ETransactionReference>5cab77ec-066b-4d88-b0a5-f8464af45aa5</Saa:E2ETransactionReference>
                </Saa:FINNetworkInfo>
            </Saa:NetworkInfo>
            <Saa:ExpiryDateTime>20220928065302</Saa:ExpiryDateTime>
        </Saa:Message>
    </Saa:Header>
    <Saa:Body>DQo6MjA6dGVzdCBMQVUNCjo3OTpMQVU=</Saa:Body>
</Saa:DataPDU>

Результат примераzgluNTE/crT+PFXTvljlz0imMZe0fWbkhmGzjD1LkrA=

Это мой тестовый код, с помощью которого я пытаюсь вычислить значение:

      public static void Signed()
{
    XmlDocument xmlDoc = new XmlDocument();
    xmlDoc.Load("lau.xml");

    //XmlDsigExcC14NTransform transform = new XmlDsigExcC14NTransform(false, "Saa Sw SwGbl SwInt SwSec");
    XmlDsigExcC14NTransform transform = new XmlDsigExcC14NTransform(false);

    transform.LoadInput(xmlDoc);

    SHA256Managed sha256 = new SHA256Managed();

    byte[] canonalizedAndDigestedContent = transform.GetDigestedOutput(sha256);
    string canonalizedAndDigestedString = Convert.ToBase64String(canonalizedAndDigestedContent);
    Console.WriteLine(canonalizedAndDigestedString);
}

Значение этого результатаuIPn2sqYFkTSqKcsFZjq1BOAbHYq8F2NaqqTlMJC/MQ=

Значение, когда я предоставляю пространства имен (строка с комментариями) в преобразовании, равноtX+fHyobZkAUrPSmxDRowDL8H7l5Mo4/AJaGuNTa0t0=

Я не могу понять, где я не прав.

Я также пробовал следующие вещи:

  • Удалить узел <?xml>
  • Сохранять пробелы при загрузке XML
  • Разделите канонизацию и хэш

Я видел некоторых людей, у которых были проблемы с JAVA, но их код работал на C#...

1 ответ

Я проверяю ваш XML. Результат ок.

ДАЙДЖЕСТ dv_length [32][ce096e35313f72b4fe3c55d3be58e5cf48a63197b47d66e48661b38c3d4b92b0]

Дайджест base64 [zgluNTE/crT+PFXTvljlz0imMZe0fWbkhmGzjD1LkrA=]

Я думаю, что у вас нет места и табуляции перед тегами xml.

Извините за мой плохой английский.

Другие вопросы по тегам