PDF 中的数字签名可让您在与利益相关者共享之前保护文档。伪造数字签名 PDF 文档的内容很容易被检测和验证。为了以编程方式对 PDF 文档进行数字签名,我将向您展示如何使用 Java 在 PDF 中添加和验证数字签名。我们将介绍以下与 PDF 中的数字签名相关的场景。
用于数字签名 PDF 的 Java 库
为了在 PDF 中添加和验证数字签名,我们将使用 Aspose.PDF for Java。与其他 PDF 操作功能一起,Aspose.PDF for Java 允许您在 PDF 中无缝添加和验证数字签名。您可以下载 API 的 JAR 或将其安装在基于 Maven 的应用程序中。
存储库:
<repository>
<id>AsposeJavaAPI</id>
<name>Aspose Java API</name>
<url>https://repository.aspose.com/repo/</url>
</repository>
依赖:
<dependency>
<groupId>com.aspose</groupId>
<artifactId>aspose-pdf</artifactId>
<version>20.6</version>
</dependency>
使用 Java 将数字签名添加到 PDF
以下是使用 Aspose.PDF for Java 向 PDF 文档添加数字签名的步骤。
- 创建 Document 类的实例并使用 PDF 文档的路径对其进行初始化。
- 初始化 PdfFileSignature 类并将 Document 对象传递给它。
- 创建 PKCS7 类的实例并使用证书路径和密码对其进行初始化。
- 为 MDP 签名类型初始化 DocMDPSignature 类。
- 定义一个 Rectangle 以将签名放置在文档的页面上。
- 使用 PdfFileSignature.Certify() 方法对 PDF 文档进行数字签名。
- 使用 PdfFileSignature.Save() 方法保存签名的 PDF。
以下代码示例展示了如何使用 Java 对 PDF 进行数字签名。
// 创建一个文档对象
Document doc = new Document("input.pdf");
PdfFileSignature signature = new PdfFileSignature(doc);
PKCS7 pkcs = new PKCS7("certificate.pfx", "1234567890"); // Use PKCS7/PKCS7Detached objects
DocMDPSignature docMdpSignature = new DocMDPSignature(pkcs, DocMDPAccessPermissions.FillingInForms);
Rectangle rect = new Rectangle(100, 600, 400, 100);
// 设置签名外观
signature.setSignatureAppearance("aspose-logo.png");
// 创建三种签名类型中的任何一种
signature.certify(1, "Signature Reason", "Contact", "Location", true, rect, docMdpSignature);
// 保存数字签名的 PDF 文件
signature.save("Digitally Signed PDF.pdf");
使用 Java 使用时间戳服务器对 PDF 进行数字签名
Aspose.PDF for Java 还允许您使用 TimeStamp 服务器将数字签名添加到 PDF。 TimestampSettings 类用于此目的。以下代码示例展示了如何使用 Java 将数字签名添加到带有时间戳服务器的 PDF。
// 创建一个文档对象
Document doc = new Document("input.pdf");
PdfFileSignature signature = new PdfFileSignature(doc);
PKCS7 pkcs = new PKCS7("certificate.pfx", "1234567890"); // Use PKCS7/PKCS7Detached objects
TimestampSettings timestampSettings = new TimestampSettings("https:\\your_timestamp_settings", "user:password"); // User/Password can be omitted
pkcs.setTimestampSettings(timestampSettings);
Rectangle rect = new Rectangle(100, 600, 400, 100);
// 设置签名外观
signature.setSignatureAppearance("aspose-logo.png");
// 创建三种签名类型中的任何一种
signature.sign(1, "Signature Reason", "Contact", "Location", true, rect, pkcs);
// 保存数字签名的 PDF 文件
signature.save("Digitally Signed PDF.pdf");
使用 Java 验证 PDF 中的数字签名
当您收到经过数字签名的 PDF 时,您可以很容易地验证其签名。以下是验证数字签名 PDF 的步骤。
- 创建 PdfFileSignature 类的实例。
- 使用 PdfFileSigntature.bindPdf(string) 方法绑定 PDF 文件。
- 使用 PdfFileSignature.verifySigned() 方法验证签名的有效性。
以下代码示例显示了如何使用 Java 验证数字签名的 PDF 文档。
// 创建 PDF 文件签名
PdfFileSignature pdfSign = new PdfFileSignature();
// 绑定PDF
pdfSign.bindPdf("Digitally Signed PDF.pdf");
// 使用签名名称验证签名
if (pdfSign.verifySigned("Signature1"))
{
if (pdfSign.isCertified()) // Certified?
{
if (pdfSign.getAccessPermissions() == DocMDPAccessPermissions.FillingInForms) // Get access permission
{
// 做一点事
}
}
}
结论
在本文中,您学习了如何使用 Java 向 PDF 添加数字签名。此外,我们还了解了如何通过几个步骤验证数字签名的 PDF 文件。您可以使用 文档 以及 GitHub 上托管的源代码示例了解有关 Java PDF API 的更多信息。