首页 > 解决方案 > Java Apache PDFBox - 加密不是确定性的

问题描述

我有以下代码。

public byte[] encryptPdf(byte[] pdf, String password) throws IOException {
   ByteArrayOutputStream baos;
   try (PDDocument pdDocument = PDDocument.load(pdf)) {
      AccessPermission accessPermission = new AccessPermission();
      StandardProtectionPolicy protectionPolicy = new 
      StandardProtectionPolicy(null, password, accessPermission);
      protectionPolicy.setEncryptionKeyLength(128);
      protectionPolicy.setPermissions(accessPermission);
      pdDocument.protect(protectionPolicy);
      baos = new ByteArrayOutputStream();
      pdDocument.save(baos);
   }
   return baos.toByteArray();
}

@Test
public void shouldEncryptedPDFEquals() {
   byte[] pdf = IOUtils.toByteArray(getClass().getClassLoader().getResourceAsStream("sample.pdf"));

   byte[] firstEncryption = encryptPdf(pdf, "token");
   byte[] secondEncryption = encryptPdf(pdf, "token");

   assertThat(firstEncryption.length, is(secondEncryption.length));
}

在测试中,我将检查加密文件是否相等。

问题是,生成的字节数组不是确定性的。

如果我多次调用该方法,则数组长度永远不会相等。断言失败。但不适用于所有类型的 pdf 文件。

Apache PDFBox 库中是否存在错误?

标签: javaapachepdfpdfbox

解决方案


推荐阅读