Ключевое слово в защите информации
КЛЮЧЕВОЕ СЛОВО
в защите информации
Получить ГОСТ TLS-сертификат для домена (SSL-сертификат)
Добро пожаловать, Гость! Чтобы использовать все возможности Вход или Регистрация.

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline Ak05  
#1 Оставлено : 7 февраля 2018 г. 13:32:17(UTC)
Ak05

Статус: Новичок

Группы: Участники
Зарегистрирован: 07.07.2017(UTC)
Сообщений: 2
Российская Федерация

Как нормализховать XML для СМЭВ, не подписывая её?

XmlDocument doc = new XmlDocument();
doc.Load(new XmlTextReader(flnm_in.Text));
SignedXml signedXml = new SignedXml(doc);
XmlDsigSmevTransform smev = new XmlDsigSmevTransform();
Reference reference = new Reference();
reference.Uri = "";
reference.AddTransform(smev);
signedXml.AddReference(reference);
XmlWriterSettings settings = new XmlWriterSettings();
settings.Async = false;
XmlWriter wrt = XmlWriter.Create(flnm_out.Text);
signedXml.GetXml().WriteContentTo(wrt);

На последней строке ошибка: Требуется метод подписи.
Offline Boris@Serezhkin.com  
#2 Оставлено : 22 февраля 2018 г. 3:24:21(UTC)
Boris@Serezhkin.com

Статус: Активный участник

Группы: Участники
Зарегистрирован: 26.08.2010(UTC)
Сообщений: 259
Откуда: Moscow

Сказал(а) «Спасибо»: 4 раз
Поблагодарили: 11 раз в 10 постах
Автор: Ak05 Перейти к цитате
Как нормализховать XML для СМЭВ, не подписывая её?

Если имеется ввиду С14, то примерно так:
Код:

public static void c14transform(XmlElement elem, Boolean sgn)
    {
      if (!g.useC14) return;
      XmlDocument xdoc = new XmlDocument();
      xdoc.PreserveWhitespace = false;
      xdoc.LoadXml(elem.OuterXml);
      System.Security.Cryptography.Xml.XmlDsigExcC14NTransform xmlTransform = 
        new System.Security.Cryptography.Xml.XmlDsigExcC14NTransform(false);
      xmlTransform.LoadInput((object)xdoc);
      xdoc.Load((MemoryStream)xmlTransform.GetOutput());

      XmlNode parent = elem.ParentNode;
      parent.RemoveChild((XmlNode)elem);

      //if (parent.FirstChild.NodeType == XmlNodeType.XmlDeclaration)
      if (parent.FirstChild is XmlDeclaration)
      {
        parent.InnerXml = xdoc.DocumentElement.OuterXml;
      }
      else
      {
        parent.InnerXml = xdoc.DocumentElement.OuterXml + parent.InnerXml;
      }
      if (sgn)
      {
        byte[] hData = ((MemoryStream)xmlTransform.GetOutput()).ToArray();
        //string tre = Encoding.GetEncoding(1251).GetString(hData);
        //tre = tre.Replace("<ds:SignedInfo xmlns:ds=\"http://www.w3.org/2000/09/xmldsig#\">", "");
        //tre = tre.Replace("</ds:SignedInfo>", "");
        //hData = Encoding.GetEncoding(1251).GetBytes(tre);

        HashAlgorithm myhash = HashAlgorithm.Create("GOST3411");
        // 'лзЁб<п_┐ е_и 
        byte[] hValue = myhash.ComputeHash(hData);
        CspParameters cspprm = new CspParameters(75);
        CspKeyContainerInfo kinfo = ((ICspAsymmetricAlgorithm)g.CertSOAP.PrivateKey).CspKeyContainerInfo;
        cspprm.KeyContainerName = kinfo.KeyContainerName;
        Gost3410CryptoServiceProvider Gost = new Gost3410CryptoServiceProvider(cspprm);
        byte[] sHash = Gost.SignHash(hValue);
        string sgnb64 = Convert.ToBase64String(sHash);
        bool b = Gost.VerifyHash(hValue, sHash);
        //XmlNamespaceManager nsmgr = new XmlNamespaceManager(parent.NameTable);
        //nsmgr.AddNamespace("ds", "http://www.w3.org/2000/09/xmldsig#");

        foreach (XmlNode xnode in parent.ChildNodes)
        {
          if (xnode.Name == "ds:SignatureValue")
          {
            xnode.InnerText = sgnb64;
            break;
          }
          g.WriteLog(xnode.Name);
        }
        //XmlNode xnode = parent.SelectSingleNode("ds:SignatureValue", nsmgr);
        //parent.SelectSingleNode("ds:SignatureValue",nsmgr).InnerText = sgnb64;
      }
    }

RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.