Я получаю ошибку, что математическое резюме не может быть проверено в 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
Нельзя было подтвердить в подписи Падса ⇐ C#
Место общения программистов C#
1751296463
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;
}
Подробнее здесь: [url]https://stackoverflow.com/questions/79684311/could-not-be-verified-in-the-pades-signature[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия