翼度科技»论坛 编程开发 .net 查看内容

C# 如何验证PDF签名有效性

4

主题

4

帖子

12

积分

新手上路

Rank: 1

积分
12
数字签名作为PDF文档中的重要安全机制,不仅能够验证文件的来源,还能确保文件内容在传输过程中未被篡改。然而,如何正确验证PDF文件的数字签名,是确保文件完整性和可信度的关键。本文将详细介绍如何使用免费.NET控件通过C#验证PDF签名的有效性以及验证PDF文档是否被修改。

  • C# 验证PDF数字签名有效性
  • C# 验证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#示例代码:
  1. using Spire.Pdf;
  2. using Spire.Pdf.Security;
  3. using Spire.Pdf.Widget;
  4. namespace VerifySignature
  5. {
  6.     class Program
  7.     {
  8.         static void Main(string[] args)
  9.         {
  10.             //加载PDF文档
  11.             PdfDocument pdf = new PdfDocument();
  12.             pdf.LoadFromFile("PDF签名.pdf");
  13.             //获取PDF文件中的表单字段集合
  14.             PdfFormWidget pdfFormWidget = (PdfFormWidget)pdf.Form;
  15.             PdfFormFieldWidgetCollection pdfFormFieldWidgetCollection = pdfFormWidget.FieldsWidget;
  16.             //遍历所有字段
  17.             for (int i = 0; i < pdfFormFieldWidgetCollection.Count; i++)
  18.             {
  19.                 //获取签名字段
  20.                 if (pdfFormFieldWidgetCollection[i] is PdfSignatureFieldWidget)
  21.                 {
  22.                     PdfSignatureFieldWidget signatureFieldWidget = (PdfSignatureFieldWidget)pdfFormFieldWidgetCollection[i];
  23.                     //获取PDF签名
  24.                     PdfSignature signature = signatureFieldWidget.Signature;
  25.                     //验证签名有效性
  26.                     bool valid = signature.VerifySignature();
  27.                     if (valid)
  28.                     {
  29.                         Console.WriteLine("有效签名");
  30.                     }
  31.                     else
  32.                     {
  33.                         Console.WriteLine("无效签名");
  34.                     }
  35.                 }
  36.             }
  37.         }
  38.     }
  39. }
复制代码
验证结果:

 
 
使用C# 验证PDF文档是否被修改

验证PDF文档是否被修改也能间接验证电子签名的有效性,如果在签名之后文档内容被修改,那么PDF签名也将失效。通过使用 PdfSignature 类提供的 VerifyDocModified() 方法可以快速验证PDF文档的完整性。
主要步骤:

  • 创建 PdfDocument 对象,并使用 LoadFromFile() 方法加载 PDF 文件
  • 获取 PDF 文件中的表单,然后使用获取表单字段集合。
  • 遍历所有字段,并判断当前字段是否为签名字段(PdfSignatureFieldWidget 类)。
  • 如果是签名字段,则通过 PdfSignatureFieldWidget.Signature 属性获取该PDF 签名。
  • 使用 PdfSignature.VerifyDocModified() 方法验证签名后文档是否被修改。
  • 输出结果。
C#示例代码:
  1. using Spire.Pdf;
  2. using Spire.Pdf.Security;
  3. using Spire.Pdf.Widget;
  4. namespace CheckSignature
  5. {
  6.     class Program
  7.     {
  8.         static void Main(string[] args)
  9.         {
  10.             //加载PDF文档
  11.             PdfDocument pdf = new PdfDocument();
  12.             pdf.LoadFromFile("PDF签名.pdf");
  13.             //获取PDF文件中的表单字段集合
  14.             PdfFormWidget pdfFormWidget = (PdfFormWidget)pdf.Form;
  15.             PdfFormFieldWidgetCollection pdfFormFieldWidgetCollection = pdfFormWidget.FieldsWidget;
  16.             //遍历所有字段
  17.             for (int i = 0; i < pdfFormFieldWidgetCollection.Count; i++)
  18.             {
  19.                 //获取签名字段
  20.                 if (pdfFormFieldWidgetCollection[i] is PdfSignatureFieldWidget)
  21.                 {
  22.                     PdfSignatureFieldWidget signatureFieldWidget = (PdfSignatureFieldWidget)pdfFormFieldWidgetCollection[i];
  23.                     //获取PDF签名
  24.                     PdfSignature signature = signatureFieldWidget.Signature;
  25.                     //验证签名后PDF文档是否被修改
  26.                     bool modified = signature.VerifyDocModified();
  27.                     if (modified)
  28.                     {
  29.                         Console.WriteLine("文档被修改了。");
  30.                     }
  31.                     else
  32.                     {
  33.                         Console.WriteLine("文档未被修改。");
  34.                     }
  35.                 }
  36.             }
  37.         }
  38.     }
  39. }
复制代码
验证结果:

 
通过这些步骤和示例代码,我们可以确保PDF文档的完整性和电子签名的有效性,从而在处理重要文件时提供额外的安全保障。
 
相关文章推荐:
C# 在PDF中添加数字签名
C# 获取PDF数字签名证书
C# 加密、解密PDF文档


来源:https://www.cnblogs.com/Yesi/p/18290140
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

举报 回复 使用道具