stogzhan написал:
Вы неправильно подписываете.
Если Вы подписываете тэг, то подпись помещаете в другой тэг. Если Вы подписываете весь xml, то подпись помещается по умолчанию.
// signNodeId - идентификатор тэга, который необходимо подписать.
// Не указывается, если необходимо подписать все содержимое документа;
signNodeId := #0; //'871fd3f8-ca08-46dd-9ec4-b3896c223918';
// parentSignNode - идентификатор тэга, в который необходимо поместить значение подписи;
parentSignNode := #0; //'Header';
// parentNameSpace - пространство имен тэга, в который необходимо поместить значение подписи.
// Если пространство имен есть, но не будет указано - то тег не найдется
parentNameSpace := #0; //'http://schemas.xmlsoap.org/soap/envelope/';
Добрый день!
Подскажите пожалуйста, а если мне нужно подписать весь XML но при этом подпись поместить под определенный тэг, правильно ли будет следующее:
string alias = "";
int flags = 0;
string signNodeId = "";
string parentSignNode = "SignatureText";
string parentNameSpace = "";
string outSign = "";
Kalkan.SignXML(alias, flags, signNodeId, parentSignNode, parentNameSpace, inData, out outSign);
Исходный xml:
<?xml version="1.0" encoding="UTF-8"?>
<PaymentCategories xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<RequestId>c2db1e16-de8c-4db5-ba36-263546519170</RequestId>
<SignatureText></SignatureText>
<PaymentCategory>
<Iin>871202301475</Iin>
<LastName>Иванов</LastName>
<FirstName>Иван</FirstName>
<SecondName>Иванович</SecondName>
<BirthDate>1987-12-02T00:00:00</BirthDate>
<Category_Code>12</Category_Code>
<BeginDate>2017-08-01T00:00:00</BeginDate>
<EndDate xsi:nil="true"/>
</PaymentCategory>
</PaymentCategories>
Результат (хэш вырезал для того чтобы не загромождать пример):
<?xml version="1.0" encoding="UTF-8"?>
<PaymentCategories xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<RequestId>c2db1e16-de8c-4db5-ba36-263546519170</RequestId>
<SignatureText>
<ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#" Id="1">
<ds:SignedInfo>
<ds:CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315"/>
<ds:SignatureMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#rsa-sha256"/>
<ds:Reference URI="">
<ds:Transforms>
<ds:Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"/>
<ds:Transform Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315#WithComments"/>
</ds:Transforms>
<ds:DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"/>
<ds:DigestValue>ucqQy9dJK6uAdiKoFszb2TZRXyAKWpSEol9ANGLzEXU=</ds:DigestValue>
</ds:Reference>
</ds:SignedInfo>
<ds:SignatureValue></ds:SignatureValue>
<ds:KeyInfo>
<ds:X509Data>
<ds:X509Certificate></ds:X509Certificate>
</ds:X509Data>
</ds:KeyInfo>
</ds:Signature>
</SignatureText>
<PaymentCategory>
<Iin>871202301475</Iin>
<LastName>Иванов</LastName>
<FirstName>Иван</FirstName>
<SecondName>Иванович</SecondName>
<BirthDate>1987-12-02T00:00:00</BirthDate>
<Category_Code>12</Category_Code>
<BeginDate>2017-08-01T00:00:00</BeginDate>
<EndDate xsi:nil="true"/>
</PaymentCategory>
</PaymentCategories>
В итоге интересует правильно ли все или есть другие варианты?