【问题标题】:PDFBox command-line options fail to decrypt a PDF file with valid user passwordPDFBox 命令行选项无法使用有效的用户密码解密 PDF 文件
【发布时间】:2018-06-13 05:27:19
【问题描述】:

我正在使用 PDFBox 2.0.8 并尝试使用提供给 jar 文件的命令行选项进行 PDF 解密。有几个 PDF 文件会导致错误说只能使用所有者密码解密(好的),但是我猜我可以使用使用 QPDF 的在线工具删除 PDF 密码。

现在我担心的是,我能否只使用与 PDFBox 相同的选项来解密 PDF,而不用担心所有者/用户密码的保留? (我猜是的,因为相同的密码可以使用 Acrobat 打开 PDF 并通过提供相同的密码保存解密的 PDF 副本)。

我当前的命令行示例

 java -jar "D:\pdfbox.jar" Decrypt -password xxxxxxxx 
   "D:\uploads\Jjre2pJsC-7KerheiZ8OUt079E7d4dlS.pdf"

我得到的异常:

  2018-06-13 - 09:52:30 - error: SaveDecryptedPDF > Failed > Error: Command 
        failed: java -jar "D:\pdfbox.jar" Decrypt -password xxxxxxxx 
        "D:\uploads\Jjre2pJsC-7KerheiZ8OUt079E7d4dlS.pdf"
       Exception in thread "main" java.io.IOException: Error: You are only allowed to 
        decrypt a document with the owner password.
        at org.apache.pdfbox.tools.Decrypt.decrypt(Decrypt.java:154)
        at org.apache.pdfbox.tools.Decrypt.main(Decrypt.java:64)
        at org.apache.pdfbox.tools.PDFBox.main(PDFBox.java:52)

各位能否建议我是否可以在没有所有者/用户密码限制的情况下实现解密,如果我有一个有效的 PDF 密码并且我能够通过手动提供密码和 PDF 阅读器应用程序来打开 PDF 文件。

【问题讨论】:

  • 对不起,我没有注意到...我从日志中挑选了这些错误,但这不是问题的原因...感谢您指出,尽管我会使用正确的日志进行更新

标签: java pdf pdfbox


【解决方案1】:

显然,用户和所有者的密码在技术上都允许解密整个文档。但是在语义上有所不同,与使用所有者密码打开相同 PDF 的人相比,使用用户密码打开 PDF 的人对 PDF 的访问权限有限。

不同的库和工具在不同程度上遵循这些语义。有些人甚至完全忽略了这种区别。

另一方面,PDFBox Decrypt 工具明确尝试遵循这些语义,只允许所有者解密 PDF:

AccessPermission ap = document.getCurrentAccessPermission();
if(ap.isOwnerPermission())
{
    document.setAllSecurityToBeRemoved(true);
    document.save( outfile );
}
else
{
    throw new IOException(
            "Error: You are only allowed to decrypt a document with the owner password." );
}

(org.apache.pdfbox.tools.Decrypt 方法decrypt)

因此,使用该工具,您无法仅通过提供用户密码来解密 PDF。但是,如果您准备更改工具代码并重新编译命令行工具,那么必要的更改是显而易见的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-07-14
    • 1970-01-01
    • 2015-11-27
    • 2010-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多