当前位置: 首页 > 知识库问答 >
问题:

PDFBOX:正在尝试解密PDF

长孙泉
2023-03-14
PDDocument pd = PDDocument.load(path);
if(pd.isEncrypted()){
    try {
        pd.decrypt("");
        pd.setAllSecurityToBeRemoved(true);
    } catch (Exception e) {
        throw new Exception("The document is encrypted, and we can't decrypt it.");
    }
Exception in thread "main" java.lang.NoClassDefFoundError: org/bouncycastle/jce/provider/BouncyCastleProvider
at org.apache.pdfbox.pdmodel.PDDocument.openProtection(PDDocument.java:1601)
at org.apache.pdfbox.pdmodel.PDDocument.decrypt(PDDocument.java:948)
...
Caused by: java.lang.ClassNotFoundException: org.bouncycastle.jce.provider.BouncyCastleProvider
...

路径是正确的,所以我不知道是怎么回事。此外,如果我查看pdDocument.decrypt(String pw)方法,我会发现:这将解密一个文档。提供此方法仅出于兼容性原因。用户应该使用新的安全层,特别是openProtection方法。

这是什么意思?谁能给出一个如何用PDFBOX正确解密PDF文档的例子吗?

共有1个答案

乜思淼
2023-03-14

请参阅依赖项列表:https://pdfbox.apache.org/1.8/dependencies.html

您需要使用bouncycastle库。

<dependency>
  <groupId>org.bouncycastle</groupId>
  <artifactId>bcprov-jdk15</artifactId>
  <version>1.44</version>
</dependency>
<dependency>
  <groupId>org.bouncycastle</groupId>
  <artifactId>bcmail-jdk15</artifactId>
  <version>1.44</version>
</dependency>

decrypt()调用在当前版本(1.8.9)中确实不推荐使用。使用

pd.openProtection(new StandardDecryptionMaterial(""));
 类似资料:
  • 我在微控制器和nodejs tcp服务器之间来回通信。微控制器与传感器数据形成json字符串。然后,微控制器将json字符串发送到WiFi模块。然后,WiFi模块使用AES256加密数据,将32个字符的十六进制字符作为密钥,然后再将加密数据发送到nodejs tcp服务器。 nodejs TCP服务器使用Google Code Crypto JS的Crypto JS模块形式。 出于测试目的,我想将

  • 我有一个文本文件,我已经加密使用移位,但我需要加密加密的文本再次,但这一次使用vigenere密码。然后我需要解密加密的文本(首先是vigenere,然后是Shift),但所有的大小写字母以及黑色空格、引号、逗号和句号都需要保持不变。我已经完成了移位、加密和解密,剩下的就是Vigenere了。下面显示的是我加密Vigenere的类,我还没有写解密,因为我被卡在加密步骤。谢谢你。

  • 问题内容: 当我尝试使用示例之一提取图像时,在运行时出现以下异常: 这是最后两行中发生异常的代码部分: 问题答案: 在您的lib目录中添加commons-logging-1.1.1.jar或jcl-over-slf4j-1.7.6.jar。

  • 我已经将示例项目放入GitHub:https://github.com/marioosh-net/pdfbox

  • 下面的hs_err_pid.log是在我的JVM崩溃时生成的。我在试着弄明白是什么引起的。如有任何意见,将不胜感激。谢谢. Java运行时环境检测到一个致命错误: SIGSEGV(0xB)在PC=0x00007F0E74C29E7D,PID=61623,TID=139695284021008 JRE版本:6.0_45-B06 Java VM:Java热点(TM)64位服务器VM(20.45-B01

  • 一旦我运行了它,我就得到了python shell上的以下代码。假设消息变量是“My name is Daniel”,我使用的shiftValue为2。这是打印出来的: