Java 验证未使用PDFBox更改的pdf内容

Java 验证未使用PDFBox更改的pdf内容,java,pdf,pdfbox,Java,Pdf,Pdfbox,我正在进行一项服务,以执行以下操作: 用户下载PDF 用户在自己的计算机上签署PDF 用户重新上传带有签名的PDF 我需要一种方法来验证下载的PDF的内容是否与新上传的带有签名的PDF相同。 这是必需的,这样邪恶的用户就不会上传一个微妙不同的PDF 我正在服务器上使用PDFBox。是否有一种安全的方法只比较PDF文件的内容,而忽略签名?PDF格式支持所谓的增量保存,这意味着所有更改都会附加到原始PDF的末尾。因此,您可以对原始字节进行二进制比较,然后“分析”增量保存,以确保只添加了签名。不过,用

我正在进行一项服务,以执行以下操作:

  • 用户下载PDF
  • 用户在自己的计算机上签署PDF
  • 用户重新上传带有签名的PDF
  • 我需要一种方法来验证下载的PDF的内容是否与新上传的带有签名的PDF相同。 这是必需的,这样邪恶的用户就不会上传一个微妙不同的PDF


    我正在服务器上使用PDFBox。是否有一种安全的方法只比较PDF文件的内容,而忽略签名?

    PDF格式支持所谓的增量保存,这意味着所有更改都会附加到原始PDF的末尾。因此,您可以对原始字节进行二进制比较,然后“分析”增量保存,以确保只添加了签名。不过,用户在自己的计算机上签名,大概是使用他选择的签名软件。因此,他可能不会使用增量更新。除非你强迫他这样做,例如,首先应用作者签名。尽管如此,分析增量更新中不需要的更改显然不是小事,只要记住今年在pdf-unsecurity.org上发布的影子攻击。谢谢你的见解!您如何看待此工作流:当用户下载pdf时,它包含一个服务器数字签名,其中包含一个内部uuid,用于标识服务器中的文件。当我从用户那里收到上传的文件时,我会检查服务器数字签名中的uuid,使其与正确的文件相匹配。这样,除非用户能够访问服务器私钥,否则无法上载其他文件。我建议您使用由签名签名签名的文档哈希,而不是任意UUID。尽管如此,您仍然必须在增量更新中检查用户添加的内容。如果用户仅使用标准软件(如Adobe Acrobat),该软件将不允许进行大多数类型的更改。但是,如果用户使用自己的程序,增量更新中可能会有任意更改。如上所述,分析不允许更改的增量更新并不是一件小事。