我有一个由第三方系统生成的 PDF。使用PDF编辑器或els软件我修改了它。
是否可以在没有原始文件的情况下检测 PDF 文件是否被修改?
我会添加更多细节。
没有加密,没有签名功能。
文档由IT系统创建。用户收到文档并对其进行修改。
是否可以以某种方式跟踪该变化?
我认为所有这些应用程序都会在 PDF 标头或文件内编码的某个位置留下一些数据,并且可以检查它。然而,Windows 资源管理器显示的属性什么也没显示...所以我很感兴趣是否有比在资源管理器中查看属性/标题更智能的东西。
这样做的问题是,只需在 Mac 上以预览方式打开 PDF 并按 Command-S 保存文件,就会替换创建日期和修改日期以匹配当前日期/时间。所以甚至创建日期也会是错误的。即使是新手用户也可能在不知不觉中执行此操作,因此如果您尝试跟踪可能故意修改文档的人,则可能会导致误报。
不幸的是,你所问的问题太容易被欺骗和愚弄。
如果没有原始文件,一切都会很困难,除非应用了加密或数字签名等安全功能,而这听起来并不存在。您是否有权访问有关原始文件的任何信息?文件大小、创建日期、元数据等?
如果用于修改 PDF 的工具按照 PDF 规范工作,那么在 Info 字典中,它应该更新 ModDate,但保留 CreationDate。您还可能会在对象上看到一些非零代号,尽管所有对象都可能已重新生成,因此将是第 0 代。CosEdit 的试用版将允许您查看这 2 项。
但是,如果该工具被用来故意修改 PDF 而不留下任何痕迹,那么他们就会欺骗这些数据,因此他们无法帮助您。
用户是否使用 Acrobat 修改 PDF?如果是这样,那么达尼奥上面提到的应该有效。严格来说,修改 PDF 应该更改其 ModDate 或 xmp:ModifyDate,而不更改其 CreationDate。然而,并非所有工具都遵循这一点;很多人只是简单地保留所有元数据不变,因此这种检查方法并不是 100% 可靠,除非您知道您的用户使用什么 PDF 编辑器。
如果您的用户使用的编辑器确实更改了 ModDate 或 xmp:ModifyDate,那么您应该能够在两个地方看到它。一种是在 Acrobat 中打开文档并按 Ctrl-D 查看文档属性。 Creation 字段和 Modified 字段应该有不同的时间戳。还可能有可用于以编程方式检索此元数据的 API。可视化它的另一种方法是简单地在记事本中打开 PDF 并搜索属性。该文档的大部分内容都不是人类可读的,但这些时间戳应该可以。如果它们确实得到了适当的更改,您始终可以在应用程序中解析它们。祝你好运!
如果您正在使用 Ubuntu linux 18.04 并使用 那么,您可以
注意:知识渊博的用户可以在不更改 PDF 元数据和文件系统中的 Created 和 Modified 时间戳的情况下操作 PDF 内容。
您可以使用一些工具来获取pdf文件属性。
我用的是pdfinfo,你可以获取文件的很多属性,并进行检查。
pdfinfo 58dcc41d01293.pdf
Author: worker
Creator: Microsoft® Word 2016
Producer: Microsoft® Word 2016
CreationDate: Sat Aug 24 16:02:29 2019
ModDate: Sat Aug 24 16:02:29 2019
Tagged: yes
UserProperties: no
Suspects: no
Form: none
JavaScript: no
Pages: 55
Encrypted: no
Page size: 841.92 x 595.32 pts (A4)
Page rot: 0
File size: 3346838 bytes
Optimized: no
PDF version: 1.7
您可以随时查看 pdf 文件的
md5sum
。我不确定您正在使用什么环境,但这应该可以帮助您入门。
元素的顺序以及其中一些元素的编码方式的具体细节将会发生结构性变化。这在视觉上是无法察觉的,但如果您参考这个答案,您会找到方法:Is it possible to uncompress PDF by using Adobe Acrobat or Acrobat Distiller?