Статус: Новичок
Группы: Участники
Зарегистрирован: 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};
}
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close