[英]iText pdf integrity check
我有一個pdf文件,其中:
這是 從“簽名”面板
如何使用iText 5驗證pdf完整性? 我想檢測到有人在時間戳之后(在Rev.1和Rev.2之間或在Rev.2之后)更改了文檔。
屏幕顯示:iText 5是否可以通過評估Adobe Acrobat的方式來檢測文檔更改:
下面的偽JAVA代碼,總是返回完整性檢查好嗎? 對於Rev.1 timestampField為true
PdfReader reader = new PdfReader("C:/tstEditSign.pdf");
AcroFields acro = reader.getAcroFields();
PdfPKCS7 pkcs7 = acro.verifySignature("timestampField");
System.out.println("Integrity check OK? " + pkcs7.verify());
感謝您的幫助或提示,如何解決此問題。
請注意,有兩種方法可以破壞集成PDF簽名的完整性:
iText可以識別第一種類型的更改(使用偽代碼之類的代碼),但是它不能立即區分增量更新中允許和不允許的更改。
具有多個簽名的PDF具有如下圖所示的結構:原始版本中的簽名signature1僅簽名此原始版本的字節。 然后,signature2對原始版本以及版本2的更改等進行簽名。 (有關詳細信息,請在此處和此處閱讀。)
但是,根據PDF規范,以后的版本只允許應用一組有限的更改,而這組更改可能取決於原始簽名的屬性。 (有關詳細信息,請點擊此處 。)
您的代碼(尤其是pkcs7.verify()
僅檢查簽名是否仍正確簽名了適用於其的字節。 但是,它不會檢查第一個簽名是否允許以后添加的更改類型。
實際上,我不知道有任何非Adobe軟件可以執行該檢查,甚至Adobe的檢查也不是完美的:只有在以類似於Adobe軟件應用方式的方式應用允許的更改時,它們才會傾向於識別允許的更改。 有時這會導致矛盾的陳述,例如兩者
在
盡管iText不提供開箱即用的功能,但它確實為您提供了一個基礎框架,您可以在該框架上嘗試並實現它。 特別是,您可以檢索文檔的每個完整的簽名修訂版,並在簡單PDF對象的級別上比較它們的結構。
不幸的是,僅根據文檔在查看器中的外觀或其行為來描述允許和不允許的更改,而不是根據允許的確切低級對象添加來描述。 這將使這項工作非常輕而易舉。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.