【问题标题】:PDFBOX security not workingPDFBOX 安全性不起作用
【发布时间】:2017-07-28 10:28:24
【问题描述】:

我使用的是 PDFBOX - 1.8.13,PDF 安全似乎没有按预期工作。如果设置了所有者密码并且未设置用户密码,如果我不提供所有者密码,PDFBOX 允许解密我的 PDF 文件。请帮助我在哪里做错了。

加密我的pdf文件的代码:

PDDocument document = PDDocument.load(new File("/home/dummy/dummy.pdf"),null);

AccessPermission perms = new AccessPermission();
perms.setCanAssembleDocument(false);;
perms.setCanExtractContent(false);
perms.setCanModify(false);
perms.setCanModifyAnnotations(false);
perms.setCanExtractForAccessibility(false);
perms.setCanFillInForm(false);

perms.setCanPrint(false);
perms.setReadOnly();
perms.setCanPrintDegraded(false);
perms.setCanExtractForAccessibility(false);

document.setAllSecurityToBeRemoved(false);

StandardProtectionPolicy policy = new StandardProtectionPolicy("AdminPasswordTest", "", perms);
policy.setPermissions(perms);

document.protect(policy);

document.save("/home/dummy/dummy_secured.pdf"); 

document.close();

解密我的PDF的代码

PDDocument doc = PDDocument.load("/home/dummy/dummy_secured.pdf", true);

if (doc.isEncrypted()) { //remove the security before adding protections
    doc.decrypt(""); //This should not be DECRYPTED because owner password is not provided
    doc.setAllSecurityToBeRemoved(true); //This user is not provided this permissions
}
doc.save("/home/dummy/dummy_decrypted.pdf");
doc.close();

【问题讨论】:

标签: security pdf pdf-generation pdfbox


【解决方案1】:

PDF Security 似乎没有按预期工作。

在这种情况下,您需要调整您的期望。 ;)

这就是 PDF 密码加密的有效方式:

  • 用户密码是实际用于加解密的密码。
  • 所有者密码允许访问 PDF 中的用户密码(预处理版本),然后可用于解密文档。

因此,您用于加密的空用户密码“”是任何人解密 PDF 所需的全部密码。

使用所有者密码而不是用户密码还允许您解密 PDF(见上文,它允许 PDF 处理器检索用户密码,然后继续并解密文件)并另外告诉 PDF 处理器您是文档的所有者,因此不受手头文档中未提供的任何权限的限制。

PDF 库通常要么根本不关心权限(AFAIK PDFBox 不关心),要么由于缺少所有者密码(例如 iText)而具有覆盖限制的开关。

因此,使用空用户密码加密 PDF(以限制权限同时让任何人打开文件)是一个非常容易克服的障碍。

【讨论】:

  • 如果我使用 doc.decrypt("");然后即使 document.setAllSecurityToBeRemoved(false);对于用户,可以通过 document.setAllSecurityToBeRemoved(true) 删除所有安全性; PDFBOX 不验证 w.r.t.所有者密码。这似乎是 PDFBOX 中的一个错误。请澄清
  • 正如我在回答中所写的那样“PDF 库通常根本不关心权限......”;你可以称之为缺少的功能。不过,我怀疑 PDFBox 用户对该功能是否有很大兴趣,因此它几乎不会被给予任何优先级......并考虑 iText 发生的事情:其中有一种机制需要所有者密码才能进行某些操作,并且起初发生了什么?人们修补了这个机制,许多非官方的 iText 版本开始流传。 IText 然后引入了一个覆盖开关,用户只需要设置一个全局变量...
  • 在开源库中实施基于软权限的限制(如 PDF 中的此处)基本上是没有意义的。
  • 顺便说一句... 即使 document.setAllSecurityToBeRemoved(false);对于用户 - 这不是权限设置,从它是document 设置而不是perms 设置这一事实可以看出。
  • 请让我知道如何使用 pdfbox-1.8.13 保护我的 PDF 的步骤
猜你喜欢
  • 2015-06-20
  • 2011-07-03
  • 1970-01-01
  • 2014-06-14
  • 2019-08-12
  • 2014-07-25
  • 2021-12-15
  • 2019-12-18
  • 1970-01-01
相关资源
最近更新 更多