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

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline afilimonov  
#1 Оставлено : 20 марта 2017 г. 19:56:31(UTC)
afilimonov

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

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

Не удаётся сформировать корректный хэш для 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=
Не могу понять почему не сходятся значения ни в одном из случаев?
Offline afilimonov  
#2 Оставлено : 22 марта 2017 г. 14:27:30(UTC)
afilimonov

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

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

up
Offline afilimonov  
#3 Оставлено : 23 марта 2017 г. 18:47:18(UTC)
afilimonov

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

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

получилось после того, как поменял алгоритм, добавив 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;
            }
        }
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.