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

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline knik85  
#1 Оставлено : 13 февраля 2025 г. 15:03:23(UTC)
knik85

Статус: Активный участник

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

Сказал(а) «Спасибо»: 6 раз
Подскажите возможно ли в криптопро net добавить в документ pdf созданную ранее в криптопро отсоединенную подпись чтобы она корректно читалась и проверялась

с эти кодом подпись добавляется, но определяется некорректной

static void EmbedCadesSignatureWithStamp(string inputPdf, string outputPdf, string signatureFile, string stampImagePath)
{
using (FileStream outputStream = new FileStream(outputPdf, FileMode.Create))
using (PdfReader reader = new PdfReader(inputPdf))
{
PdfStamper stamper = PdfStamper.CreateSignature(reader, outputStream, '\0');

PdfSignatureAppearance appearance = stamper.SignatureAppearance;
//appearance.SetReason("Digitally signed via CAdES-BES");
// appearance.SetLocation("Company Name");
appearance.SetVisibleSignature(new Rectangle(50, 50, 250, 150), 1, "Signature1");

// Add an image as a signature stamp (if exists)
if (File.Exists(stampImagePath))
{
Image image = Image.GetInstance(stampImagePath);
appearance.Image = image;
appearance.ImageScale = -1; // Auto-scale image
}
else
{
// If no image, add text-based signature stamp
AddTextStamp(appearance, "Signed via CryptoPro (CAdES-BES)");
}

// Read the detached CAdES-BES signature
byte[] signatureBytes = File.ReadAllBytes(signatureFile);

// Apply precomputed CAdES-BES signature
IExternalSignatureContainer externalSignature = new PrecomputedCadesSignature(signatureBytes);
MakeSignature.SignExternalContainer(appearance, externalSignature, 8192);
}
}

// Custom method to add a text-based signature stamp
static void AddTextStamp(PdfSignatureAppearance appearance, string text)
{
appearance.Layer2Text = text;
appearance.Layer2Font = new Font(Font.FontFamily.HELVETICA, 12, Font.BOLD);
}
}

// Class to attach precomputed CAdES-BES CryptoPro signature
public class PrecomputedCadesSignature : IExternalSignatureContainer
{
private readonly byte[] signature;

public PrecomputedCadesSignature(byte[] signature)
{
this.signature = signature;
}
PdfName filterName = new PdfName("CryptoPro PDF");
public void ModifySigningDictionary(PdfDictionary signDic)
{
signDic.Put(PdfName.FILTER, PdfName.ADOBE_PPKLITE);
signDic.Put(PdfName.SUBFILTER, PdfName.ETSI_CADES_DETACHED);
}

public byte[] Sign(Stream data)
{
return signature;
}
}

Отредактировано пользователем 13 февраля 2025 г. 15:10:44(UTC)  | Причина: Не указана

RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.