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 類並將文檔對像傳遞給它。
- 創建 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 將數字簽名添加到帶有 TimeStamp 服務器的 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 的更多信息。