数字签名作为PDF文档中的重要安全机制,不仅能够验证文件的来源,还能确保文件内容在传输过程中未被篡改。然而,如何正确验证PDF文件的数字签名,是确保文件完整性和可信度的关键。本文将详细介绍如何使用免费.NET控件通过C#验证PDF签名的有效性 以及验证PDF文档是否被修改。
免费.NET PDF库安装:
Free Spire.PDF for .NET 免费库可以通过NuGet直接安装,或者通过以下链接下载产品包解压缩后手动引用dll。
https://www.e-iceblue.com/Download/download-pdf-for-net-free.html
使用C# 验证PDF数字签名有效性
Free Spire.PDF 提供了 PdfSignature
类用于代表PDF文档中的数字签名,要验证签名的有效性可以用该类的 VerifySignature()
方法。
主要步骤:
- 创建
PdfDocument
对象,并使用LoadFromFile()
方法加载 PDF 文件。 - 获取 PDF 文件中的表单,然后使用获取表单字段集合。
- 遍历所有字段,并判断当前字段是否为签名字段(
PdfSignatureFieldWidget
类)。 - 如果是签名字段,则通过
PdfSignatureFieldWidget.Signature
属性获取该PDF 签名。 - 使用
PdfSignature.VerifySignature()
方法检查 PDF 签名的有效性 - 输出结果。
C#示例代码:
csharp
using Spire.Pdf;
using Spire.Pdf.Security;
using Spire.Pdf.Widget;
namespace VerifySignature
{
class Program
{
static void Main(string[] args)
{
//加载PDF文档
PdfDocument pdf = new PdfDocument();
pdf.LoadFromFile("PDF签名.pdf");
//获取PDF文件中的表单字段集合
PdfFormWidget pdfFormWidget = (PdfFormWidget)pdf.Form;
PdfFormFieldWidgetCollection pdfFormFieldWidgetCollection = pdfFormWidget.FieldsWidget;
//遍历所有字段
for (int i = 0; i < pdfFormFieldWidgetCollection.Count; i++)
{
//获取签名字段
if (pdfFormFieldWidgetCollection[i] is PdfSignatureFieldWidget)
{
PdfSignatureFieldWidget signatureFieldWidget = (PdfSignatureFieldWidget)pdfFormFieldWidgetCollection[i];
//获取PDF签名
PdfSignature signature = signatureFieldWidget.Signature;
//验证签名有效性
bool valid = signature.VerifySignature();
if (valid)
{
Console.WriteLine("有效签名");
}
else
{
Console.WriteLine("无效签名");
}
}
}
}
}
}
验证结果:
使用C# 验证PDF文档是否被修改
验证PDF文档是否被修改也能间接验证电子签名的有效性,如果在签名之后文档内容被修改,那么PDF签名也将失效。通过使用 PdfSignature
类提供的 VerifyDocModified()
方法可以快速验证PDF文档的完整性。
主要步骤:
- 创建
PdfDocument
对象,并使用LoadFromFile()
方法加载 PDF 文件 - 获取 PDF 文件中的表单,然后使用获取表单字段集合。
- 遍历所有字段,并判断当前字段是否为签名字段(
PdfSignatureFieldWidget
类)。 - 如果是签名字段,则通过
PdfSignatureFieldWidget.Signature
属性获取该PDF 签名。 - 使用
PdfSignature.VerifyDocModified()
方法验证签名后文档是否被修改。 - 输出结果。
C#示例代码:
csharp
using Spire.Pdf;
using Spire.Pdf.Security;
using Spire.Pdf.Widget;
namespace CheckSignature
{
class Program
{
static void Main(string[] args)
{
//加载PDF文档
PdfDocument pdf = new PdfDocument();
pdf.LoadFromFile("PDF签名.pdf");
//获取PDF文件中的表单字段集合
PdfFormWidget pdfFormWidget = (PdfFormWidget)pdf.Form;
PdfFormFieldWidgetCollection pdfFormFieldWidgetCollection = pdfFormWidget.FieldsWidget;
//遍历所有字段
for (int i = 0; i < pdfFormFieldWidgetCollection.Count; i++)
{
//获取签名字段
if (pdfFormFieldWidgetCollection[i] is PdfSignatureFieldWidget)
{
PdfSignatureFieldWidget signatureFieldWidget = (PdfSignatureFieldWidget)pdfFormFieldWidgetCollection[i];
//获取PDF签名
PdfSignature signature = signatureFieldWidget.Signature;
//验证签名后PDF文档是否被修改
bool modified = signature.VerifyDocModified();
if (modified)
{
Console.WriteLine("文档被修改了。");
}
else
{
Console.WriteLine("文档未被修改。");
}
}
}
}
}
}
验证结果:
通过这些步骤和示例代码,我们可以确保PDF文档的完整性和电子签名的有效性,从而在处理重要文件时提供额外的安全保障。