gpt4 book ai didi

java - iText PdfStamper 增加签名 pdf 的大小

转载 作者:行者123 更新时间:2023-11-30 07:08:12 32 4
gpt4 key购买 nike

为什么 PdfStamper 会增加我每次使用的签名 pdf 的大小?

这是我的代码:

private static void test(String src, String pwd, String dest) throws Exception {
byte[] pwdByte = pwd != null ? pwd.getBytes() : null;
PdfReader r = null;
PdfStamper stp = null;
FileOutputStream fos = null;
try {
r = new PdfReader(src, pwdByte);
fos = new FileOutputStream(dest);
stp = new PdfStamper(r, fos, '\0', true);
} finally {
stp.close();
fos.close();
r.close();
}
}

如果我调用 test,生成的 pdf 会根据签名信息增加大小:

  • 我的初始 pdf 有 LTV 标志,但我需要添加时间戳。我需要 addLtv() 一些 pdf,然后 addLtvNoTs() 因为它是不同的 TSA。这使得在追加模式下调用两次 PdfReader,每次我这样做都会将我的 pdf 增加到 190kb aprox。这意味着将其增加 380kb。 http://developers.itextpdf.com/question/how-enable-ltv-timestamp-signature

  • 我已经测试过使用简单的 pdf 来调用上述测试方法,每次我对生成的 pdf 调用 test() 时,每次都会增加 3,5kb (我认为是由于符号信息较小)。

如果我的 pdf 已签名,为什么 pdfstamper 会增加我的 pdf 大小,即使我没有添加任何更改?我怎样才能避免它? 390kb 这是一个问题,因为我需要放弃数千个 pdf 并存储它们。

我使用的是 itext 5.5.9

提前致谢!

最佳答案

这是一个奇怪的问题,因为它表明您不理解数字签名的概念。当您签署 PDF 时,您希望确保一旦有人更改单个字节,签名就会中断。每次签署文档时,您都可以通过添加签名字典来保护文档先前版本的字节,该字典的内容至少包含您要保护的字节的签名哈希。 p>

请参见下图,该图显示了经过三次签名的 PDF 的架构:

enter image description here

假设您想要添加第四个签名,并且希望生成的文件具有与以前相同的大小,则必须更改现有文档中的一些字节。这将破坏至少一个现有的签名。

您提到了生命周期值(value)。 LTV 意味着添加文档安全存储 (DSS) 和时间戳签名。同样的规则适用:您必须添加额外的字节,因为一旦您更改现有字节,您就会破坏现有的签名:

enter image description here

每次最新时间戳签名的证书过期时,您都必须重复相同的过程:

enter image description here

总文件大小将始终增加。

关于java - iText PdfStamper 增加签名 pdf 的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39702898/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com