1) 我看到有些人致力于在 PDF 对象之间隐藏数据。他们告诉这个方法有效,但最大的缺点是 acrobat reader 在关闭窗口时要求重新保存文件。
我不明白他们在 PDF 对象之间隐藏信息是什么意思。
通常,您的 PDF 是一系列 PDF 对象,前面有标识数字和将这些数字映射到它们在 PDF 中的位置的交叉引用:
...
2 0 obj
/WinAnsiEncoding
endobj
3 0 obj
<<
/Type /Font
/Subtype /Type1
/BaseFont /Courier
/Name /F001
/Encoding 2 0 R
>>
endobj
4 0 obj
<<
/Type /Font
/Subtype /Type1
/BaseFont /Courier-Bold
/Name /F002
/Encoding 2 0 R
>>
....
xref
0 17
0000000000 65535 f
0000014476 00000 n
0000000017 00000 n
0000000052 00000 n
0000000205 00000 n
...
当 PDF 解析器解析一个对象(例如对象 2)时,它们通常只在交叉引用中查找关联的值(这里在对象 2 的情况下是 17 ) 并从第 17 个字节开始读取文件,首先需要对象和世代号 (2 0),然后是标签 obj;他们将该标记之后的所有内容解析到匹配的 endobj 标记,然后停止。 (实际上在某些情况下它有点扭曲,但这是一般的想法。)
因此,有些人认为在一个 PDF 对象的 endobj 和下一个 PDF 对象的编号之间添加他们的秘密数据是个好主意,如下所示:
2 0 obj
/WinAnsiEncoding
endobj
HERE ARE MY VERY SECRET VERY HIDDEN DATA, PROBABLY ENCRYPTED ETC
3 0 obj
现在一些 PDF 阅读器确实认识到存在一些垃圾字节,并提出在没有它们的情况下保存文件。
2) 我还看到有人在 %%EOF 之后隐藏信息,并被告知这不是解决方案,因为签名未应用于需要功能的元数据。
大多数 PDF 阅读器会忽略标记后的一些垃圾数据,因为在很久以前,某些 PDF 生成或传输过程会在那里留下一些额外的垃圾。
...
%%EOF
AGAIN SOME SECRET DATA
但是,当他们自己操作 PDF 时,例如在签署它们时,PDF 阅读器可能会继续根据 PDF 规范丢弃所有不存在的内容。或者在签名的情况下,他们可能会将尾随字节留在原处,然后在它们之后整合签名。一些程序在文件末尾期待那些额外的数据,之后可能找不到它们了,因为它们现在在里面的某个地方。
另外我不明白他们对本主题中元数据的含义?
有些人实际上使用此类机制来添加后续处理步骤所需的信息。例如。创建一些 PDF 发票的过程可能会在文件末尾添加发送 PDF 的地址和要支付的金额,然后对 PDF 进行更多处理,例如审查或存档,并在某些最终过程中发送给收件人。
根据最后添加的数量,审核步骤可能会有所不同;也许价值超过 1000 美元的销售额必须由特殊人员清算。
发送过程也可以使用文件结束后的额外数据将文件发送给接收者。
有关某些文档的此类数据有时称为元数据。