簡體   English   中英

iText pdf完整性檢查

[英]iText pdf integrity check

我有一個pdf文件,其中:

  • 修訂版1包含文檔時間戳
  • 加上時間戳后,添加了一些文本,但未創建新修訂版
  • 在修訂版2中的文檔是簽名

這是 Adobe Acrobat屏幕 從“簽名”面板

如何使用iText 5驗證pdf完整性? 我想檢測到有人在時間戳之后(在Rev.1和Rev.2之間或在Rev.2之后)更改了文檔。

屏幕顯示:iText 5是否可以通過評估Adobe Acrobat的方式來檢測文檔更改:

  • 自簽署以來,文件已被更改或損壞。
  • “ 2頁已修改”

下面的偽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簽名的完整性:

  • 它所簽名的PDF中的字節范圍實際上已更改。
  • 在其標志的字節范圍之后的增量更新中添加了不允許的更改。

iText可以識別第一種類型的更改(使用偽代碼之類的代碼),但是它不能立即區分增量更新中允許和不允許的更改。

背景

結構體

具有多個簽名的PDF具有如下圖所示的結構:原始版本中的簽名signature1僅簽名此原始版本的字節。 然后,signature2對原始版本以及版本2的更改等進行簽名。 (有關詳細信息,請在此處此處閱讀。)

但是,根據PDF規范,以后的版本只允許應用一組有限的更改,而這組更改可能取決於原始簽名的屬性。 (有關詳細信息,請點擊此處 。)

您的代碼(尤其是pkcs7.verify()僅檢查簽名是否仍正確簽名了適用於其的字節。 但是,它不會檢查第一個簽名是否允許以后添加的更改類型。

實際上,我不知道有任何非Adobe軟件可以執行該檢查,甚至Adobe的檢查也不是完美的:只有在以類似於Adobe軟件應用方式的方式應用允許的更改時,它們才會傾向於識別允許的更改。 有時這會導致矛盾的陳述,例如兩者

  • 自從應用此簽名以來,對該文檔所做的某些更改是文檔作者所不允許的。
  • 自應用此簽名以來,此文檔未做任何更改。

在此處輸入鏈接說明

實施檢查(不允許)的更改

盡管iText不提供開箱即用的功能,但它確實為您提供了一個基礎框架,您可以在該框架上嘗試並實現它。 特別是,您可以檢索文檔的每個完整的簽名修訂版,並在簡單PDF對象的級別上比較它們的結構。

不幸的是,僅根據文檔在查看器中的外觀或其行為來描述允許和不允許的更改,而不是根據允許的確切低級對象添加來描述。 這將使這項工作非常輕而易舉。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM