Нельзя было подтвердить в подписи ПадсаC#

Место общения программистов C#
Ответить
Anonymous
 Нельзя было подтвердить в подписи Падса

Сообщение Anonymous »

Я получаю ошибку, что математическое резюме не может быть проверено в C# Padessignature. Я использую iexternalsignatureContainer . Мне нужна ваша помощь для подписания кода успешно подписание, но я получаю ошибку: < /p>

(-) Проверка математической проверки подписи во время проверки. Подпись не может быть проверена математически. Контент не соответствует < /p>
< /blockquote>
Можете ли вы помочь мне с точкой, которую я пропустил?public byte[] Sign(Stream data)
{
byte[] contentToBeSigned;
using (var ms = new MemoryStream())
{
data.Position = 0;
data.CopyTo(ms);
contentToBeSigned = ms.ToArray();
}

var bcCert = new X509CertificateParser().ReadCertificate(_certificate.getEncoded());

Asn1EncodableVector attrVector = GetAttrributes(contentToBeSigned, bcCert);

// DerSequence = sıralı ASN.1
byte[] derEncodedSignedAttributes = new DerSequence(attrVector).GetEncoded(Asn1Encodable.Der);

// 7. Akıllı kartla imzala (sadece signedAttributes)
var signer = _cardManager.GetSigner(_pin, _certificate);
byte[] realSignature = signer.sign(derEncodedSignedAttributes);
_cardManager.Logout();

// 8. PrecalculatedSignatureFactory ile gerçek imzayı CMS içine yerleştir
var signatureFactory = new PrecalculatedSignatureFactory("1.2.840.113549.1.1.11", realSignature);
var attrTable = new Org.BouncyCastle.Asn1.Cms.AttributeTable(new DerSet(attrVector));

var signerInfoGenBuilder = new SignerInfoGeneratorBuilder()
.WithSignedAttributeGenerator(new DefaultSignedAttributeTableGenerator(attrTable));

var signerInfoGen = signerInfoGenBuilder.Build(signatureFactory, bcCert);

var cmsGen = new CmsSignedDataGenerator();
cmsGen.AddSignerInfoGenerator(signerInfoGen);
cmsGen.AddCertificate(bcCert);

// 9. Detached CMS üret (PDF imzası için 'false' gerekli!)
CmsSignedData signedData = cmsGen.Generate(new CmsProcessableByteArray(contentToBeSigned), false);

// 10. CMS çıktısını döndür
return signedData.GetEncoded();
}
< /code>
Мой метод подписания, как указано выше, я беру хэши с атрибутами и знаком. Я также создаю атрибуты в коде ниже < /p>
public Asn1EncodableVector GetAttrributes(byte[] contentToBeSigned, X509Certificate bcCert)
{
byte[] messageDigest = DigestUtilities.CalculateDigest("SHA-256", contentToBeSigned);

// 4. Sertifikanın hash değeri (signingCertificateV2 için)
byte[] certHash = DigestUtilities.CalculateDigest("SHA-256", _certificate.getEncoded());

var issuerName = bcCert.IssuerDN;
var serialNumber = bcCert.SerialNumber;
var issuerNameGeneral = new GeneralName(GeneralName.DirectoryName, issuerName);
var issuerSerial = new IssuerSerial(new GeneralNames(issuerNameGeneral), new DerInteger(serialNumber));

var signingCertV2 = new SigningCertificateV2(new[]
{
new EssCertIDv2(
new AlgorithmIdentifier(NistObjectIdentifiers.IdSha256),
certHash,
issuerSerial)});

// 5. SignedAttributes attribute'leri hazırla
var attrVector = new Asn1EncodableVector();

// 1. contentType
attrVector.Add(new Org.BouncyCastle.Asn1.Cms.Attribute(
PkcsObjectIdentifiers.Pkcs9AtContentType,
new DerSet(CmsObjectIdentifiers.Data)));

// 2. messageDigest
attrVector.Add(new Org.BouncyCastle.Asn1.Cms.Attribute(
PkcsObjectIdentifiers.Pkcs9AtMessageDigest,
new DerSet(new DerOctetString(messageDigest))));

// 3. signingCertificateV2
attrVector.Add(new Org.BouncyCastle.Asn1.Cms.Attribute(
new DerObjectIdentifier("1.2.840.113549.1.9.16.2.47"),
new DerSet(signingCertV2)));

return attrVector;
}


Подробнее здесь: https://stackoverflow.com/questions/796 ... -signature
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»