Подпись PDF itext pkcs7 с несколькими знакамиJAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Гость
 Подпись PDF itext pkcs7 с несколькими знаками

Сообщение Гость »


Я хотел бы поставить несколько подписей в документе PDF, как в рабочем процессе. Я использую следующий код для подписи написанного мной PDF-файла, и он работает нормально.

Чтобы получить хеш

public String getHash() { LOGGER.debug("PDFSigner.getHash: метод вызван"); Строка pdfHashValue = null; пытаться { int contentEstimated = PDFSigner.CONTENT_ESTIMATED;//8192 HashMap exc = new HashMap(); exc.put(PdfName.CONTENTS, contentEstimated * 2 + 2); PdfSignature pdfSignature = новая PdfSignature(PdfName.ADOBE_PPKLITE, PdfName.ADBE_PKCS7_DETACHED); pdfSignature.setReason(appearance.getReason()); pdfSignature.setLocation(appearance.getLocation()); pdfSignature.setContact(appearance.getContact()); pdfSignature.setDate(new PdfDate(appearance.getSignDate())); появление.setCryptoDictionary(pdfSignature); появление.preClose(искл); Данные InputStream = появление.getRangeStream(); MessageDigest messageDigest = MessageDigest.getInstance("SHA-256"); байт buf[] = новый байт[contentEstimated]; интервал п = 0; while ((n = data.read(buf, 0, contentEstimated)) > 0) { messageDigest.update(buf, 0, n); } байтовый хеш[] = messageDigest.digest(); byte[] reqBytesdata = Hex.encode(хеш); pdfHashValue = новая строка (reqBytesdata, «UTF8»); } catch (опыт исключения) { LOGGER.error("Произошла ошибка PDFSigner getHash", exp); } вернуть pdfHashValue; } Чтобы подписать документ

//dSignature — полученная закодированная подпись pkcs7 (SHA256). //начинается с MIIOWQYJKoZIhvcNAQcCo..... public boolean doSign(String dSignature) выдает IOException, DocumentException { логическое значение pdfGenerationStatus = false; пытаться { byte[] PKCS7Response = Base64.decode(dSignature .getBytes("UTF8")); byte[]paddedSig = новый байт[PDFSigner.CONTENT_ESTIMATED]; System.arraycopy(PKCS7Response, 0, PaddedSig, 0, PKCS7Response.length); PdfDictionary pdfDictionary = новый PdfDictionary(); pdfDictionary.put(PdfName.CONTENTS, новый PdfString(paddedSig).setHexWriting(true)); появление.закрыть(pdfDictionary); pdfGenerationStatus = правда; } catch (опыт исключения) { LOGGER.error("doSign", exp); } вернуть pdfGenerationStatus; } И приведенный выше код работает нормально. Мое новое требование — добавить несколько подписей. Есть ли способ повторно использовать этот фрагмент кода для того же самого. Я прошел через это, это и это, но безуспешно.

Кроме этого я попробовал создать несколько пустых подписей и попытаться прикрепить их. Но это привело к созданию поврежденных файлов. Я также попытался создать файл, используя метод, упомянутый в этой ссылке. MakeSignature.signExternalContainer Также просмотрел отличный документ «Цифровые подписи для PDF-документов».

Сценарий использования похож
[*]Создать PDF-файл [*]Создать хеш документа [*]отправить на внешний сервер [*]внешний сервер вернет строку в кодировке pkcs7 base64 [*]добавить подпись в PDF-файл
ОБНОВЛЕНИЕ

Изменение кода касалось «режима добавления», следующее изменение кода привело к тому, что мой код стал поддерживать мультиподпись, спасибо @Paulo Soares, @mlk
private void initAppearanceAppend(String customerName) выдает IOException, DocumentException { System.out.println("PDFSigner.initAppearanceAppend"); PdfReader readpdf = новый PdfReader(this.getInputPdfFilePath()); int LastPageNumber = Readerpdf.getNumberOfPages(); this.pdfSignatureMetaData.setPageNumber(lastPageNumber); this.pdfSignatureMetaData.setSignerName(имя клиента); //this.pdfSignatureMetaData.setPageNumber(PDFSigner.SIGNATURE_PAGE_NUMBER); OutputStream fout = новый FileOutputStream(this.outputPdfFilePath); //PdfStamper Stamperpdf = PdfStamper.createSignature(readerpdf, fout, '\0'); СТАРЫЙ КОД БЕЗ РЕЖИМА ДОБАВЛЕНИЯ PdfStamper Stamperpdf = PdfStamper.createSignature(readerpdf, fout, '\0', новый файл("E://temp"), true); this.appearance = Stamperpdf.getSignatureAppearance(); LOGGER.debug("PDFSigner.initAppearanceAppend: создаются конфигурации по умолчанию"); }
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Цифровая подпись дайджеста PDF в подписанный хэш pkcs7 с помощью AWS CloudHSM
    Anonymous » » в форуме JAVA
    0 Ответы
    26 Просмотры
    Последнее сообщение Anonymous
  • Проверьте подпись PDF с помощью iText 8
    Anonymous » » в форуме C#
    0 Ответы
    19 Просмотры
    Последнее сообщение Anonymous
  • Подписание PDF с ITEXT: подпись недействительна после подписания
    Anonymous » » в форуме C#
    0 Ответы
    4 Просмотры
    Последнее сообщение Anonymous
  • Подписание PDF с ITEXT: подпись недействительна после подписания
    Anonymous » » в форуме C#
    0 Ответы
    3 Просмотры
    Последнее сообщение Anonymous
  • Подписание PDF с ITEXT: подпись недействительна после подписания
    Anonymous » » в форуме C#
    0 Ответы
    3 Просмотры
    Последнее сообщение Anonymous

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