如何设置ENCRYPTION_AES_128? - Java 的 iText 7.1.0

How to set ENCRYPTION_AES_128? - iText 7.1.0 for Java

目前我正在用 iText 编写几个评估程序。

我遇到 AES 加密问题。

STANDARD_ENCRYPTION_128 工作正常,但 ENCRYPTION_AES_128 产生运行时错误。

我尝试了很多,但没有任何效果。有人知道这里出了什么问题吗?

谢谢,德克

import java.awt.Desktop;
import java.io.File;
import java.io.IOException;

import com.itextpdf.kernel.pdf.EncryptionConstants;
import com.itextpdf.kernel.pdf.PdfDocument;
import com.itextpdf.kernel.pdf.PdfWriter;
import com.itextpdf.kernel.pdf.WriterProperties;
import com.itextpdf.layout.Document;
import com.itextpdf.layout.element.Paragraph;

public class problem3 {
    public static void main(String[] args) throws IOException {
        String fnPdf = "results/problem3.pdf";
        WriterProperties properties = new WriterProperties();
        // ENCRYPTION_AES_128 produces an runtime error, STANDARD_ENCRYPTION_128 is working.
        properties.setStandardEncryption("Hello".getBytes(), "World".getBytes(), EncryptionConstants.ALLOW_PRINTING,
                EncryptionConstants.ENCRYPTION_AES_128);
        PdfWriter writer = new PdfWriter(fnPdf, properties);
        PdfDocument pdf = new PdfDocument(writer);
        Document document = new Document(pdf);
        Paragraph paragraph = new Paragraph("Hello AES-128!");
        document.add(paragraph);
        document.close();
        pdf.close();
        Desktop.getDesktop().open(new File(fnPdf));
    }
}

你在运行时的错误可能是

java.lang.NoClassDefFoundError: org/bouncycastle/crypto/BlockCipher

这是因为 iText 使用 BouncyCastle 库来提供一些加密功能。该依赖项是可选的,这意味着您必须在需要时手动添加它。

如果您使用 Maven 进行构建,请确保您具有以下依赖项:

<dependency>
  <groupId>org.bouncycastle</groupId>
  <artifactId>bcpkix-jdk15on</artifactId>
  <version>1.49</version>
</dependency>
<dependency>
  <groupId>org.bouncycastle</groupId>
  <artifactId>bcprov-jdk15on</artifactId>
  <version>1.49</version>
</dependency>

如果您手动将 jar 添加到类路径(不推荐这样做),那么您可以转到 Maven Central 并手动下载必要的工件 jar。