[英]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.