Статус: Новичок
Группы: Участники
Зарегистрирован: 20.03.2017(UTC) Сообщений: 3 ![Российская Федерация Российская Федерация](/forum2/Content/images/flags/RU.png) Откуда: Москва
|
Не удаётся сформировать корректный хэш для xml элемента. Т.е. при формировании хэша вручную и при использовании функционала SignedXML получаю разный результат. Исходный пример: Код:<?xml version="1.0"?>
<Signature xmlns="http://www.w3.org/2000/09/xmldsig#">
<SignedInfo>
<CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
<SignatureMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#gostr34102001-gostr3411"/>
<Reference URI="#Object1">
<DigestMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#gostr3411"/>
<DigestValue></DigestValue>
</Reference>
</SignedInfo>
<SignatureValue></SignatureValue>
<KeyInfo>
<X509Data>
<X509Certificate></X509Certificate>
</X509Data>
</KeyInfo><Object Id="Object1"/></Signature>
Подписание xml осуществляется таким методом: Код:var oSigner = new CPSigner
{
Certificate = <сертификат, алгоритм хэширования GOST R 34.11-94>,
TSAAddress = "http://cryptopro.ru/tsp/",
};
var oSignedXml = new SignedXML
{
SignatureType = CADESCOM_XML_SIGNATURE_TYPE.CADESCOM_XML_SIGNATURE_TYPE_TEMPLATE,
Content = <xml документ в виде строки>
};
return oSignedXml.Sign(oSigner);
Получаю значение в DigestValue = JCAjSMLpK8qXfmUgzCua+19vxfwy8AOzQ5TFuEy95m0= (в base64) Далее я пытаюсь подписать элемент из Reference с помощью кода: Код:var oHashedData = new CPHashedData
{
Algorithm = (CAPICOM_HASH_ALGORITHM)CADESCOM_HASH_ALGORITHM.CADESCOM_HASH_ALGORITHM_CP_GOST_3411
};
oHashedData.Hash("<Object xmlns=\"http://www.w3.org/2000/09/xmldsig#\" Id=\"Object1\"></Object>"); // формат c14n
byte[] bytes = HexStringToByteArray(oHashedData.Value); // Шестрадцатиричное значение в байт-массив
string base64String = Convert.ToBase64String(bytes);
return base64String;
И на выходе получаю /80+u2d+hwYTja3JxpphBV2C7GrtnSsTP0MS/fFTi/U= Пытался и не форматированное значение "<Object Id=\"Object1\" xmlns=\"http://www.w3.org/2000/09/xmldsig#\" />" , на выходе m+hLf/knzQtGh2leMsvd+q5EBQqE4ZZz5sMC1ls1iZQ= и изначальное значение "<Object Id=\"Object1\"/>" , на выходе eqUWNQeGoAckGla6K8XN+RXvukqCXexcWxCQCmqmupw= Не могу понять почему не сходятся значения ни в одном из случаев?
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 20.03.2017(UTC) Сообщений: 3 ![Российская Федерация Российская Федерация](/forum2/Content/images/flags/RU.png) Откуда: Москва
|
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 20.03.2017(UTC) Сообщений: 3 ![Российская Федерация Российская Федерация](/forum2/Content/images/flags/RU.png) Откуда: Москва
|
получилось после того, как поменял алгоритм, добавив DataEncoding. вопрос снят Код:
/// <param name="value">Строка в UTF-8</param>
/// <returns>hex значение хэша</returns>
public string GetHashByString(string value)
{
try
{
var oHashedData = new CPHashedData
{
Algorithm = (CAPICOM_HASH_ALGORITHM)CADESCOM_HASH_ALGORITHM.CADESCOM_HASH_ALGORITHM_CP_GOST_3411,
DataEncoding = CADESCOM_CONTENT_ENCODING_TYPE.CADESCOM_BASE64_TO_BINARY
};
//надо перевести в base64
var byteValue = Encoding.UTF8.GetBytes(value);
var base64Value = Convert.ToBase64String(byteValue);
oHashedData.Hash(base64Value);
return oHashedData.Value;
}
catch (Exception ex)
{
SaveLogInfo("GetHashByString" + Environment.NewLine, ex);
throw;
}
}
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close