繁体   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