Механизм подписи XML Kalkan'ом из .NET C# сырой
(1 чел.) (1) гость
  • Страница:
  • 1
  • 2
  • 3

ТЕМА: Механизм подписи XML Kalkan'ом из .NET C# сырой

Механизм подписи XML Kalkan'ом из .NET C# сырой 4 года, 4 мес. назад #1541

  • Baur
  • Новый участник
  • Постов: 19
  • Репутация: 1
Для подписи XML в настоящий момент мы активно используем IolaCOM, причем в самых разных проектах. В этой библиотеке есть хорошо работающий метод SignXML, который принимает XML в виде строки и возвращает его с подписью также в виде строки.

На совещании вы сказали, что в обертке Kalkan'а для .NET C# добавите возможность подписи XML. Мы рассчитываем, что это будет полноценная замена IolaCOM.

Получив новый SDK, я поэкспериментировал с KK_XMLsign_example и в нем обнаружились проблемы.

1) Нет такого же метода SignXML, который принимает и возвращает XML строку, показан лишь пример подписи XML файла. Файлы мне подписывать не нужно, более того, даже не всегда есть возможность искусственно создавать файлы.
Добавьте, пожалуйста, аналогичный IolaCOM метод.

2) Попытался подписать XML "через файлы" - не получилось. В вашем примере используется нестандартная для windows кодировка файлов, и я не смог ее воспроизвести. Вот мой код.

        private const string xmlToSign = 
@"<?xml version=""1.0""?>
<Root>
	<Name>НҰРЛАН</Name>
	<Surname>ҚҰСТҮТІНОВ</Surname>
	<Position>Главный специалист</Position>
	<Age>20</Age>
</Root>";



        private void testSign() {
            string signedXml = sign(xmlToSign, "gost.p12", "123456");
            int x = 1;
        }


        private string sign(string xml, string key, string pass) {
            XMLClass xmlEx = new XMLClass();

            const string fileInput = "Kalkan_test.xml";
            const string fileOutput = "Kalkan_test_signed.xml";

            File.WriteAllText(fileInput, xml);

            try {
                int resultInit = xmlEx.initXML();
                
                if (resultInit != 0) {
                    throw new Exception("initXML");
                }

                int resultSign = xmlEx.signXMLfile(fileInput, fileOutput, key, pass);

                if (resultSign != 0) {
                    throw new Exception("signXMLfile");
                }

                string output = File.ReadAllText(fileOutput);
                return output;

            } finally {
                int resultFree = xmlEx.freeXML();
            }
        }



Kalkan дает следующий некорректный Kalkan_test_signed.xml


<?xml version="1.0"?>
<Root>
<Name>&#x41D;&#x4B0;&#x420;&#x41B;&#x410;&#x41D;</Name>
<Surname>&#x49A;&#x4B0;&#x421;&#x422;&#x4AE;&#x422;&#x406;&#x41D;&#x41E;&#x412;</Surname>
<Position>&#x413;&#x43B;&#x430;&#x432;&#x43D;&#x44B;&#x439; &#x441;&#x43F;&#x435;&#x446;&#x438;&#x430;&#x43B;&#x438;&#x441;&#x442;</Position>
<Age>20</Age>
<ds:Signature xmlns:ds=" www.w3.org/2000/09/xmldsig#">
<ds:SignedInfo>
...


Таким образом, механизм подписи XML Kalkan'ом из .NET C# еще не рабочий и нуждается в доработке.
Изменено: 4 года, 4 мес. назад от Baur.

Re: Механизм подписи XML Kalkan'ом из .NET C# сырой 4 года, 4 мес. назад #1554

  • ugotbug
  • Завсегдатай
  • Постов: 225
  • Репутация: 14
Добрый день.

Да вы правы, в новом криптопровайдере отсутствует полный аналог функции SignXML из IolaCOM, а только есть простая функция подписи файлов, что не является, конечно столь удобным. Мы добавим в SDK пример подписи XML, который передается в виде строки; сейчас разработчик занимается этим вопросом.
Кроме того, параллельно мы ведем разработку дополнительной библиотеки-обертки, которая предоставит высокоуровневое API, по аналогии с IolaCOM. Это делается для упрощения процесса разработки функционала работы с ЭЦП разработчиками информационных систем.
Примерные сроки реализации высокоуровневой библиотеки - 2 квартал текущего года. Относительно примера подписи строки - до конца текущей недели (примерно). Также будет оповещение об изменениях в SDK, в котором будет данный пример.
Относительно windows кодировки, попробуйте добавить в исходный XML запись <?xml version="1.0" encoding="UTF-8"?>.
Могущественный обладатель кольца Знаний
Изменено: 4 года, 4 мес. назад от ugotbug.

Re: Механизм подписи XML Kalkan'ом из .NET C# сырой 4 года, 4 мес. назад #1556

  • Baur
  • Новый участник
  • Постов: 19
  • Репутация: 1
Добавление <?xml version="1.0" encoding="UTF-8"?> помогло получить корректную подпись.
Новая высокоуровневная обертка, я так понимаю, будет во 2 квартале (апрель-июнь), а не в первом.

Re: Механизм подписи XML Kalkan'ом из .NET C# сырой 4 года, 4 мес. назад #1559

  • ugotbug
  • Завсегдатай
  • Постов: 225
  • Репутация: 14
Да, второй квартал. Опечатка.
Могущественный обладатель кольца Знаний

Re: Механизм подписи XML Kalkan'ом из .NET C# сырой 4 года, 4 мес. назад #1560

  • Tima
  • Осваиваюсь на форуме
  • Постов: 31
  • Репутация: 0
Новую высокоуровневую обертку еще не реализовали?
Мне нужно реализовать взаимодействие с ГЦВП, могу ли я использовать IolaCOM.dll версии 5.9.0.0.
Или какую библиотеку надо использовать из SDK КАЛКАНа в языке С#.NET

Re: Механизм подписи XML Kalkan'ом из .NET C# сырой 4 года, 4 мес. назад #1561

  • Baur
  • Новый участник
  • Постов: 19
  • Репутация: 1
IolaCOM еще актуальна, так как Kalkan еще вышел официально. Советую все-таки попробовать применить Kalkan, в него, кстати, добавили подпись XML как строк.
  • Страница:
  • 1
  • 2
  • 3
FaLang translation system by Faboba