将数字签名添加到 PDF C#

数字签名用于在与第三方共享 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 包管理器

在 C# 中对 PDF 进行数字签名

包管理器控制台

PM> Install-Package Aspose.PDF

在 C# 中为 PDF 添加数字签名

以下是使用 Aspose.PDF for .NET 签署 PDF 文档的步骤。

以下代码示例展示了如何在 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 文件进行数字签名。

相关文章