gpt4 book ai didi

Java iText 使用外部签名签署 PDF - 容器大小估计

转载 作者:行者123 更新时间:2023-11-30 11:06:18 24 4
gpt4 key购买 nike

使用iText给带有外部签名的PDF文档签名时,我必须先准备一个空的签名容器:

PdfReader reader = new PdfReader(src);
FileOutputStream os = new FileOutputStream(dest);
PdfStamper stamper = PdfStamper.createSignature(reader, os, '\0');
PdfSignatureAppearance appearance = stamper.getSignatureAppearance();
appearance.setVisibleSignature(rectangle, 1, fieldName);
appearance.setCertificate(chain[0]);
ExternalSignatureContainer external = new ExternalBlankSignatureContainer(PdfName.ADOBE_PPKLITE, PdfName.ADBE_PKCS7_DETACHED);
MakeSignature.signExternalContainer(appearance, external, 8192);

MakeSignature.signExternalContainer(appearance, external, 8192); 的最后一个参数是 estimatedSize - 签名的保留大小。

如果 PDF 有例如 10000 字节并且 estimatedSize 设置为 10000 字节并且实际签名容器有 1000 字节,那么生成的 PDF 将是原始 PDF 的大小 + estimatedSize,而不是原始 PDF 的大小 + 签名容器的大小,后者可能会更大。

有什么方法可以准确计算 estimatedSize 参数来避免签名 PDF 大小的这种增加?

或者能够计算签名的确切大小的先决条件是什么?

有没有其他方法如何使用 iText 签署 PDF 文档来避免这种情况?

最佳答案

这里已经有了这个问题的答案:https://stackoverflow.com/a/29345340/1622493有人指出选择 0 作为估计大小的值将导致 iText 代替您进行估计。

您无法计算签名的精确 大小,但在我的书 Digital signatures for PDF documents 的第 3.5 节中,我详细解释了你应该考虑哪些因素:

enter image description here

假设您有一个使用证书创建的签名,该证书是需要添加 2 个 OSCP 响应的链的一部分,您需要添加 2 倍 4,192 字节。如果要添加 CRL,则需要估计 CRL 将占用多少字节。如果是好的 CA,这可能是一个很小的数字。如果 CA 不好,CRL 可能会很大。 (换句话说:在选择 CRL 或 OSCP 之间做出的权衡将取决于 CA。)

另一个非常有用的指示是您发送给客户端以在客户端签名的字节数。如果您已经发送了一个包含超过 10,000 个字节的散列,那么您不应期望签名的散列会少于 10,000 个字节。签名哈希值的大小取决于签名算法和 key 的长度。

关于Java iText 使用外部签名签署 PDF - 容器大小估计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29364645/

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