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

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline MikhailGunya  
#1 Оставлено : 28 июля 2025 г. 8:49:41(UTC)
MikhailGunya

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

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

Добрый день.

На данный момент стоит задача: взять из XML зашифрованный в B64 архив, подписать его, а открепленную подпись сохранить в отдельном поле этого же XML.
Однако, при создании подписи, на основе примера от КриптоПро(https://dss.cryptopro.ru/libcore/docs/04-%D0%BF%D1%80%D0%B8%D0%BC%D0%B5%D1%80%D1%8B/04-08-%D1%81%D0%BE%D0%B7%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5-cms-%D0%BF%D0%BE%D0%B4%D0%BF%D0%B8%D1%81%D0%B8.html), инструменты КриптоПро возвращают ошибку "0x80091007: Неправильное значение хеша", а Госуслуги определяют подпись как неверную.

Не выходит разобраться, в чем проблема, так как почти аналогичный метод для создания подписей для XML успешно создает открепленную подпись.

Пожалуйста, помогите найти ошибку.

Код:
public SignatureData CreateDetachedSignFile(string fileString, CpX509Certificate2 certificate, bool detached)
{

    if (certificate == null)
        throw new ArgumentNullException(nameof(certificate));

    byte[] bytes = Convert.FromBase64String(fileString);
    var test = Convert.ToBase64String(bytes);
    byte[] signature;


    using (var gostCert = certificate)
    {
        var contentInfo = new ContentInfo(bytes);
        var signedCms = new CpSignedCms(contentInfo, detached);
        CpCmsSigner cmsSigner = new CpCmsSigner(gostCert);
        
        cmsSigner.DigestAlgorithm = gostCert.PublicKey.Oid; 
        cmsSigner.PrivateKey = gostCert.GetGost3410_2012_256PrivateKey();

        // Опционально добавляем подписанные атрибуты.
        cmsSigner.SignedAttributes.Add(new Pkcs9SigningTime(DateTime.Now));
        cmsSigner.SignedAttributes.Add(new PkcsSigningCertificateV2(gostCert));

        // Вычисляем и кодируем подпись в массив байт.
        signedCms.ComputeSignature(cmsSigner);
        signature = signedCms.Encode();
    }

    // Создаем объект ContentInfo по сообщению.
    // Это необходимо для создания объекта SignedCms.
    ContentInfo contentInfoVerify = new ContentInfo(bytes);

    //// Создаем SignedCms для декодирования и проверки.
    CpSignedCms signedCmsVerify = new CpSignedCms(contentInfoVerify, detached);

    //// Декодируем подпись
    signedCmsVerify.Decode(signature);

    //// Проверяем подпись
    signedCmsVerify.CheckSignature(true);

    return new SignatureData() { Signature = signature};
}
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.