数字签名用于在与第三方共享 PDF 文档之前对其进行保护。对 PDF 文档进行数字签名可以通过使用数字签名验证文档来检测篡改。为了使用数字签名以编程方式保护 PDF 文档,本文将向您展示如何使用 C# 在 PDF 文件中添加数字签名。您还将学习如何在 C# 中验证 PDF 文件中的数字签名。
C# .NET API 在 PDF 中添加数字签名
为了在 PDF 文档中添加和验证数字签名,我们将使用 Aspose.PDF for .NET API,这是一个强大的 PDF 操作 API,用于创建、编辑、转换和数字签名 PDF 文档。您可以 下载 Aspose.PDF for .NET 或在 Visual Studio 中使用以下方式之一安装它:
NuGet 包管理器
包管理器控制台
PM> Install-Package Aspose.PDF
在 C# 中为 PDF 添加数字签名
以下是使用 Aspose.PDF for .NET 签署 PDF 文档的步骤。
- 创建 Document 类的对象并使用 PDF 文档的路径对其进行初始化。
- 创建 PdfFileSignature 类的对象并使用 Document 类的对象对其进行初始化。
- 创建一个 PKCS7 类的对象,并使用证书路径和密码对其进行初始化。
- 为 MDP 签名类型创建并初始化 DocMDPSignature 类的对象。
- 为签名放置创建一个 Rectangle。
- 使用 PdfFileSignature.Certify() 方法对 PDF 文档进行数字签名。
- 使用 PdfFileSignature.Save() 方法保存文档。
以下代码示例展示了如何在 C# 中向 PDF 文档添加数字签名。
// 加载 PDF 文档
using (Document pdfDocument = new Document("Document.pdf"))
{
using (PdfFileSignature signature = new PdfFileSignature(pdfDocument))
{
PKCS7 pkcs = new PKCS7("certificate.pfx", "1234567890"); // Use PKCS7/PKCS7Detached objects
DocMDPSignature docMdpSignature = new DocMDPSignature(pkcs, DocMDPAccessPermissions.FillingInForms);
System.Drawing.Rectangle rect = new System.Drawing.Rectangle(100, 100, 200, 100);
// 设置签名外观
signature.SignatureAppearance = @"aspose-logo.png";
// 创建三种签名类型中的任何一种
signature.Certify(1, "Signature Reason", "Contact", "Location", true, rect, docMdpSignature);
// 保存数字签名的 PDF 文件
signature.Save("Digitally Signed PDF.pdf");
}
}
C# 使用时间戳服务器向 PDF 添加数字签名
您还可以通过使用 TimestampSettings 类提供其详细信息,使用 TimeStamp 服务器将数字签名添加到 PDF 文档。以下代码示例展示了如何使用 C# 中的时间戳服务器对 PDF 文档进行数字签名。
// 加载 PDF 文档
using (Document pdfDocument = new Document("Document.pdf"))
{
using (PdfFileSignature signature = new PdfFileSignature(pdfDocument))
{
PKCS7 pkcs = new PKCS7("certificate.pfx", "WebSales"); // Use PKCS7/PKCS7Detached objects
TimestampSettings timestampSettings = new TimestampSettings("https:\\your_timestamp_settings", "user:password"); // User/Password can be omitted
pkcs.TimestampSettings = timestampSettings;
System.Drawing.Rectangle rect = new System.Drawing.Rectangle(100, 100, 200, 100);
// 创建三种签名类型中的任何一种
signature.Sign(1, "Signature Reason", "Contact", "Location", true, rect, pkcs);
// 保存输出 PDF 文件
signature.Save("Output.pdf");
}
}
在 C# 中验证数字签名的 PDF
以下是验证 PDF 文档中数字签名的步骤:
- 创建 Document 类的对象并使用 PDF 文档的路径对其进行初始化。
- 创建 PdfFileSignature 类的对象并使用 Document 类的对象对其进行初始化。
- 访问 PDF 文档的所有签名。
- 使用 PdfFileSignature.VerifySigned() 方法验证签名的有效性。
以下代码示例展示了如何使用 C# 验证 PDF 中的数字签名。
// 加载 PDF 文档
using (Document pdfDocument = new Document("Document.pdf"))
{
using (PdfFileSignature signature = new PdfFileSignature(pdfDocument))
{
IList<string> sigNames = signature.GetSignNames();
if (sigNames.Count > 0) // Any signatures?
{
if (signature.VerifySigned(sigNames[0] as string)) // Verify first one
{
if (signature.IsCertified) // Certified?
{
if (signature.GetAccessPermissions() == DocMDPAccessPermissions.FillingInForms) // Get access permission
{
// 做一点事
}
}
}
}
}
}
免费试用 Aspose.PDF for .NET
您可以获得 免费临时许可证 来尝试使用 Aspose.PDF for .NET。
结论
在本文中,您学习了如何在 C#.NET 中向 PDF 文件添加数字签名。此外,您还了解了如何在 C# 中以编程方式验证数字签名的 PDF 文件。您可以简单地在您的应用程序中安装 Aspose.PDF for .NET 并无缝地对您的 PDF 文件进行数字签名。