Как сохранить изображение цифровой подписи или его байт [] в базе данных с помощью itextsharp? - PullRequest
0 голосов
/ 25 мая 2018

Я работаю над формой в формате PDF, и она содержит поле цифровой подписи.Когда мы нажимаем на поле цифровой подписи, он запрашивает выбор действительной подписи и после этого просит сохранить файл.Мое требование - сохранить цифровую подпись в БД на основе идентификатора пользователя.У меня есть кнопка в форме PDF, когда мы нажимаем на эту кнопку, она перенаправляет в файл обработчика.Этот класс-обработчик получает данные в виде httpcontext.В этом случае после отправки кнопки все остальные данные файла поступают в обработчик, кроме поля цифровой подписи.

Есть ли способ прочитать данные цифровой подписи в обработчике?

Заранее спасибо.

1 Ответ

0 голосов
/ 25 мая 2018

Прежде всего,

Этот класс-обработчик получает данные в виде httpcontext.В этом случае после отправки кнопки все другие данные в полях поступают в обработчик, кроме поля цифровой подписи.

Похоже, в действии отправки формы в формате PDF установлен флаг ExportFormat .В этом случае цифровые подписи не передаются.Вместо этого необходимо либо установить флаг SubmitPDF , который приводит к отправке всего документа со всеми изменениями, либо ни один из этих двух флагов (вызывающих отправку FDF), а вместо этого IncludeAppendSaves флаг, заставляющий представленный файл FDF включать содержимое всех инкрементных обновлений базового документа PDF.

На стороне сервера полный PDF необходим для продолжения высокоуровневых методов iText, для SubmitPDF это именно то, что вы получаете, для IncludeAppendSaves вам нужно объединить исходный PDF-файл с инкрементными обновлениями.

Теперь вы можете извлекать данные подписи.

Поскольку вы используете имя iTextSharp и тег , я предполагаю, что вы используете версию 5.5.x, а не версию 7.x iText для .Net.

Каждый раз, когда у вас есть PDF, вы можете определить его подписанные поля подписи, используя метод GetSignatureNames() свойства AcroFields PdfReader, который вы использовали для чтения файла:

PdfReader reader = new PdfReader(path);
AcroFields fields = reader.AcroFields;
List<String> names = fields.GetSignatureNames();

Для каждого такого поля вы можете получить действительные байты сигнатуры из записи Contents словаря сигнатур поля:

byte[] signatureBytes = fields.GetSignatureDictionary(name).GetAsString(PdfName.CONTENTS).GetOriginalBytes();

В случаесовместимые с ISO 32000-1 или подписью PAdES / ISO 32000-2, эти байты будут содержать довольно простую структуру подписи PKCS # 1 или контейнер подписи CMS.Чтобы по-настоящему разобраться в этих структурах, вам обычно также требуется дополнительная информация из словаря сигнатур.

...