有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何向已经签名的PDF添加覆盖,而不使用PDFBOX使第一个签名无效?

我试图在已经签名的PDF(可见分离签名)中添加覆盖(我认为这是不允许的更改),然后再次签名。这将导致第一个签名无效。然而,第二个签名仍然有效

在第二次签名后,两个签名是否都有效

我正在使用PDFBOX v2。0.8

附上样本PDF here

  1. 原始PDF
  2. 对第一步中的PDF进行数字签名
  3. 覆盖第2步中的数字签名PDF
  4. 对第3步生成的PDF进行数字签名

谢谢, 阿比


共 (1) 个答案

  1. # 1 楼答案

    事实证明,主要的问题不是第一次签名后应用的更改是否被允许,问题在于这些更改是使用普通保存添加到文件中的

    这样的正常保存可以完全改变PDF对象在PDF文件中的存储顺序。因此,这样的正常保存会损坏第一个签名,使其无法修复,因为其声称的签名字节范围已更改,并且签名值也不再位于这些范围之间的间隙中

    因此,无论对已签名文档应用哪种更改,都要确保将其存储为增量更新

    尽管如此,PDFBox增量更新机制很难用于除其设计目的之外的任何东西,即除了添加额外签名之外的任何东西。您必须标记更改的低级对象,包括从文档目录到它们的一系列对象,因此您必须特别了解如何在非常低级的级别上实现更改。此外,这种机制通常要求保存的对象比实际更改为“目录链”标准的对象多