iText7 PDF 解锁器不适用于某些引发 BadPasswordException 的加密 PDF



我用这个基本代码通过密码解密pdf

pdfReader = PdfReader(sourceFileInputStream, ReaderProperties().setPassword(ownerPassword.toByteArray()))

但它只适用于我从iText示例repo下载的加密pdf,而不适用于其他类似的pdf:

  • 具有所有者密码的示例PDF 1-ownerpw
  • 示例PDF 2具有所有者密码-所有者密码和用户密码-用户密码

它为我提供了上述pdfs:的堆栈竞争

com.itextpdf.kernel.exceptions.BadPasswordException: Bad user password. Password is not provided or wrong password provided. Correct password should be passed to PdfReader constructor with properties. See ReaderProperties#setPassword() method.
at com.itextpdf.kernel.crypto.securityhandler.StandardHandlerUsingAes256.initKeyAndReadDictionary(StandardHandlerUsingAes256.java:253)
at com.itextpdf.kernel.crypto.securityhandler.StandardHandlerUsingAes256.<init>(StandardHandlerUsingAes256.java:89)
at com.itextpdf.kernel.pdf.PdfEncryption.<init>(PdfEncryption.java:245)
at com.itextpdf.kernel.pdf.PdfReader.readDecryptObj(PdfReader.java:1403)
at com.itextpdf.kernel.pdf.PdfReader.readPdf(PdfReader.java:762)
at com.itextpdf.kernel.pdf.PdfDocument.open(PdfDocument.java:1982)
at com.itextpdf.kernel.pdf.PdfDocument.<init>(PdfDocument.java:246)
at com.itextpdf.kernel.pdf.PdfDocument.<init>(PdfDocument.java:228)

我想可能在我的实现中有一些错误,所以我尝试了iText基于Web的解锁器,但它也导致了";错误的所有者密码。请重试&";。

我在上面使用的pdf是由我生成的,用于使用Adobe Acrobat Pro进行测试。

这些pdf文件也被这个在线服务成功解密。

如果有人知道它出了什么问题,请告诉我。非常感谢。

文件中的加密信息无效。

在文件的相应加密字典中,R(修订(值为6OU条目的值为127字节长。

不过,根据规范:

(必需(一个字节字符串,如果R的值为4或更小,则32字节长;如果R6,则48字节长,[…][/tr>(必需(字节字符串,如果R的值为4或更小,则为32字节长;如果R6,则为48字节长,[…][/tr>
类型
O 字节字符串
U 字节字符串

最新更新