gpt4 book ai didi

java - iText pdf 完整性检查

转载 作者:行者123 更新时间:2023-12-02 11:34:09 32 4
gpt4 key购买 nike

我有一个 pdf 文件,其中:

  • 牧师。 1 包含文档时间戳
  • 在添加时间戳后添加了一些文本,但没有创建新的修订版
  • 在 Rev. 2 文档中签名

这里是Adobe Acrobat screen来自签名面板

如何使用 iText 5 验证 pdf 完整性?我想检测到有人在时间戳之后更改了文档(Rev.1 和 Rev.2 之间,或 Rev.2 之后)。

iText 5 是否可以像 Adob​​e Acrobat 那样检测文档更改,如屏幕所示:

  • “文档自签名以来已被更改或损坏。”
  • “已修改 2 页”

下面的伪JAVA代码,总是返回完整性检查OK? true 对于 Rev.1 时间戳字段

 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 可以识别第一种类型的更改(使用伪代码之类的代码),但它无法开箱即用地区分增量更新中允许和不允许的更改。

背景

structure

具有多个签名的 PDF 具有如下图所示的结构:原始版本中的签名,signature1,仅对该原始版本的字节进行签名。然后,signature2 对原始版本加上版本 2 的更改等进行签名。(有关详细信息,请阅读 herehere。)

但根据 PDF 规范,后续版本仅允许应用一组有限的更改,并且这组更改可能取决于原始签名的属性。 (有关详细信息,请阅读 here 。)

您的代码,尤其是 pkcs7.verify(),仅检查签名是否仍然正确地对其适用的字节进行签名。但它不会检查第一个签名是否允许后续添加引入的更改类型。

实际上,我不知道有任何非 Adob​​e 软件执行该检查,甚至 Adob​​e 的检查也并不完美:它们偏向于识别允许的更改,仅当它们以类似于 Adob​​e 软件应用方式的方式应用时它。这有时会导致矛盾的陈述,例如两者都

  • 自应用此签名以来对此文档所做的一些更改未经文档作者允许。
  • 自应用此签名以来,本文档未发生任何更改。

enter link description here

对允许(禁止)的更改进行检查

虽然 iText 不提供这种开箱即用的检查,但它确实为您提供了一个基本框架,您可以在该框架上尝试自己实现它。特别是,您可以检索文档的每个完整签名修订版本,并在简单 PDF 对象级别上比较它们的结构。

不幸的是,允许和不允许的更改仅根据文档在查看器中的外观或其具有哪些行为来描述,而不是根据允许添加哪些确切的低级对象来描述。这将使这项工作变得非常重要。

关于java - iText pdf 完整性检查,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49070029/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com