生成或更新 PDF 以包含加密的隐藏水印?

Dav*_*vis 10 encryption pdf batch watermark steganography

背景

使用 LaTeX 写一本书。当用户购买图书时,将自动生成 PDF。

问题

PDF 应带有水印,其中包括此人的姓名和联系信息。

哪些软件符合以下标准:

  • 将加密的不可见水印应用于 PDF
  • 开源
  • 独立于平台(Linux、Windows)
  • 快速(在 1 秒内标记 200 页 PDF)
  • 批处理(完全由命令行驱动)
  • 抗串通攻击
  • 非易碎(例如,PDF -> EPS -> PDF 仍包含水印)
  • 有据可查(显示示例用法)

想法和资源

一些想法和发现:

NLP 的问题是会引入语法错误。隐写术的问题在于图像来自图像缓存,因此使用带水印的图像重新创建缓存会在生成 PDF 时产生延迟(我可以只从缓存中删除一个图像,但这不是一个优雅的解决方案)。

谢谢!

Kur*_*fle 6

几年前我做过类似的事情。它不符合您所有的“硬”标准。它是这样工作的:

  • 我在随机 PDF 页面的边界之一的某个随机位置放置了一个几乎无法检测的 2x2 点大小的“可点击”区域。它不太可能被偶然发现(在 PDF 中其他非常明显的可点击热点的负载中......)。

  • 如果您单击该链接,它会将您带到一个网页http://my.own.site/project/87245e386722ad77b4212dbec4f0e912,其中包含一些编造的“勘误表”要点。(我有没有提到87245e386722ad77b4212dbec4f0e912我保存在数据库表中的人名 + 联系人数据的 MD5 哈希?:-)

显然,这并不能防止打印+扫描+ocr-ing 或防止PDF“重试”循环。而且它还依赖于某种程度的“隐匿性安全”。

以下是您如何使用 Ghostscript 在 random-in.pdf 的第 1 页的左下角添加这样一个可点击的热点:

gs \
 -o random-out.pdf \
 -sDEVICE=pdfwrite \
 -dPDFSETTINGS=/prepress \
 -c "[ /Rect [1 1 3 3]" \
 -c "  /Color [1 1 1]" \
 -c "  /Page 1" \
 -c "  /Action <</Subtype /URI" \
 -c "  /URI (http://my.own.site/87245e386722ad77b4212dbec4f0e912)>>" \
 -c "  /Subtype /Link" \
 -c "  /ANN pdfmark" \
 -f random-in.pdf
Run Code Online (Sandbox Code Playgroud)

要使可点击区域更大且可见,请像这样更改命令行参数:

 [....]
 -c "[/Rect [1 1 50 50]" \
 -c "  /Color [1 0 0]" \
 [....]
Run Code Online (Sandbox Code Playgroud)

更简单的方法是在数据库中生成并保留 PDF 的 MD5 哈希值。由于文档 UUID 以及元数据中的 CreationDate 和 ModDate,它对于您创建的每个 PDF 都是唯一的。当然,这也只允许以数字形式跟踪原始 PDF...