2015-03-31 16 views
1

當利用iText簽署PDF文檔與外部簽名,我要準備空白簽名集裝箱第一:的Java 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文檔以避免這種情況?

回答

0

這裏已經有一個關於這個問題的答案: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個字節。簽名散列的大小取決於簽名算法和密鑰的長度。