Itextpdf Знак «Цифровая подпись…»JAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Itextpdf Знак «Цифровая подпись…»

Сообщение Anonymous »

Когда я использую пакет itextpdf для подписи PDF-файла, я успешно подписал PDF-файл, но после подписания отображается содержимое подписи «Цифровая подпись...», что показывает не имя подписывающего лица, а мое представление PDF-файла. был идентифицирован в инструменте. Как мне изменить свой код, чтобы подписывающее лицо могло отображаться в документе?
Изображение
Ниже — часть моего кода. Я хочу отображать информацию о подписывающем лице в содержимом моей подписи. Какие изменения мне нужно внести?
static byte[] prepareAndHashForSigning(PdfReader pdfReader, OutputStream outputStream, String fieldName) throws DocumentException, IOException, GeneralSecurityException {
PdfStamper pdfStamper = PdfStamper.createSignature(pdfReader, outputStream, (char) 0);
PdfSignatureAppearance pdfSignatureAppearance = pdfStamper.getSignatureAppearance();
pdfSignatureAppearance.setVisibleSignature(new Rectangle(80, 140, 188, 172), 1, fieldName);
ExternalSignatureContainer blankContainer = new ExternalBlankSignatureContainer(PdfName.ADOBE_PPKLITE, PdfName.ADBE_PKCS7_DETACHED);
MakeSignature.signExternalContainer(pdfSignatureAppearance, blankContainer, 12000);
InputStream rangeStream = pdfSignatureAppearance.getRangeStream();
BouncyCastleDigest bouncyCastleDigest = new BouncyCastleDigest();
byte[] hash = DigestAlgorithms.digest(rangeStream, bouncyCastleDigest.getMessageDigest("SHA256"));
return hash;
}

/**
* This method sets the signature container placeholder in the signature dictionary
* value of the signature field with the given name.
*/
static void injectPkcs7Container(PdfReader pdfReader, OutputStream outputStream, String fieldName, byte[] signatureContainer) throws DocumentException, IOException, GeneralSecurityException {
ExternalSignatureContainer injectingContainer = new InjectingSignatureContainer(signatureContainer);
MakeSignature.signDeferred(pdfReader, fieldName, outputStream, injectingContainer);
}

/**
* This is a dummy method that returns the given hash itself instead of a signature
* container for it. Obviously, it is not for production purposes.
*/
static byte[] retrievePkcs7ContainerForHash(byte[] hash) {
String base64CertificateString =".....";
byte[] decodedCertificateBytes = Base64.getDecoder().decode(base64CertificateString);
return decodedCertificateBytes;
}

/**
* This {@link ExternalSignatureContainer} implementation returns a pre-generated
* byte array in its {@link #sign(InputStream)} method.
*/
static class InjectingSignatureContainer implements ExternalSignatureContainer {
final byte[] signatureContainer;

public InjectingSignatureContainer(byte[] signatureContainer) {
this.signatureContainer = signatureContainer;
}

@Override
public byte[] sign(InputStream data) throws GeneralSecurityException {
return signatureContainer;
}

@Override
public void modifySigningDictionary(PdfDictionary signDic) {
}
}

public static void main(String[] args) throws IOException {
File origFile = new File("POL571_RedLight_company.pdf");
File tempFile = new File("deferredContainerSigningTemp.pdf");
File resultFile = new File("deferredContainerSigningResult.pdf");
String fieldName = "Signature";
byte[] hash = null;
try (
OutputStream tempOutput = Files.newOutputStream(tempFile.toPath())
) {
PdfReader pdfReader = new PdfReader(origFile.getPath());
hash = prepareAndHashForSigning(pdfReader, tempOutput, fieldName);
String s = Base64.getEncoder().encodeToString(hash);
System.out.println(s);
} catch (DocumentException | GeneralSecurityException | IOException e) {
throw new RuntimeException(e);
}

byte[] signatureContainer = retrievePkcs7ContainerForHash(hash);

try (
OutputStream resultOutput = Files.newOutputStream(resultFile.toPath())
) {
PdfReader pdfReader = new PdfReader(tempFile.getPath());
injectPkcs7Container(pdfReader, resultOutput, fieldName, signatureContainer);
} catch (DocumentException | GeneralSecurityException e) {
throw new RuntimeException(e);
}
}


Подробнее здесь: https://stackoverflow.com/questions/783 ... -signed-by
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Цифровая подпись eBay для Restful API/подпись базы подписи с заданным закрытым ключом на C#
    Anonymous » » в форуме C#
    0 Ответы
    47 Просмотры
    Последнее сообщение Anonymous
  • Цифровая подпись Itext7 не видна
    Anonymous » » в форуме C#
    0 Ответы
    25 Просмотры
    Последнее сообщение Anonymous
  • Цифровая подпись дайджеста PDF в подписанный хэш pkcs7 с помощью AWS CloudHSM
    Anonymous » » в форуме JAVA
    0 Ответы
    25 Просмотры
    Последнее сообщение Anonymous
  • Цифровая подпись с PoinF на странице mupdf
    Anonymous » » в форуме JAVA
    0 Ответы
    10 Просмотры
    Последнее сообщение Anonymous
  • Цифровая подпись с PoinF на странице mupdf
    Anonymous » » в форуме Android
    0 Ответы
    9 Просмотры
    Последнее сообщение Anonymous

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