当前位置: 首页 > news >正文

C# 验证PDF数字签名的有效性

数字签名作为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() 方法。

主要步骤:

  1. 创建PdfDocument 对象,并使用 LoadFromFile() 方法加载 PDF 文件。
  2. 获取 PDF 文件中的表单,然后使用获取表单字段集合。
  3. 遍历所有字段,并判断当前字段是否为签名字段(PdfSignatureFieldWidget 类)。
  4. 如果是签名字段,则通过 PdfSignatureFieldWidget.Signature 属性获取该PDF 签名。
  5. 使用 PdfSignature.VerifySignature() 方法检查 PDF 签名的有效性
  6. 输出结果。

C#示例代码:

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("无效签名");}}}}}
}

验证结果:
验证PDF签名

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

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

主要步骤:

  1. 创建 PdfDocument 对象,并使用 LoadFromFile() 方法加载 PDF 文件
  2. 获取 PDF 文件中的表单,然后使用获取表单字段集合。
  3. 遍历所有字段,并判断当前字段是否为签名字段(PdfSignatureFieldWidget 类)。
  4. 如果是签名字段,则通过 PdfSignatureFieldWidget.Signature 属性获取该PDF 签名。
  5. 使用 PdfSignature.VerifyDocModified() 方法验证签名后文档是否被修改。
  6. 输出结果。

C#示例代码:

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文档完整性

通过这些步骤和示例代码,我们可以确保PDF文档的完整性和电子签名的有效性,从而在处理重要文件时提供额外的安全保障。


相关文章推荐:
C# 在PDF中添加数字签名
C# 获取PDF数字签名证书
C# 加密、解密PDF文档

http://www.lryc.cn/news/389176.html

相关文章:

  • 2小时动手学习扩散模型(pytorch版)【入门版】【代码讲解】
  • Centos7网络配置(设置固定ip)
  • 英伟达被“压制”的25年
  • windows安装Gitblit还是Bonobo Git Server
  • 仪器校准的概念与定义,计量校准是什么?
  • Vue3+Pinia
  • label studio数据标注平台的自动化标注使用
  • 高并发场景下的热点key问题探析与应对策略
  • 学习一下C++中的枚举的定义
  • 开发一套java语言的智能导诊需要什么技术?java+ springboot+ mysql+ IDEA互联网智能3D导诊系统源码
  • C++| STL之string
  • [数据集][目标检测]游泳者溺水检测数据集VOC+YOLO格式4599张2类别
  • JAVA实现麦克风说话同声传译
  • LabVIEW与PLC通讯方式及比较
  • 2024/6/30 英语每日一段
  • Postman接口测试工具的原理及应用详解(五)
  • 208.贪心算法:买卖股票的最佳时机||(力扣)
  • 【论文阅读】伸缩密度比估计:Telescoping Density-Ratio Estimation
  • MongoDB数据库 MQL (MongoDB Query Language)语句大全
  • Java代码基础算法练习-计算平均身高-2024.07.02
  • BIOS设置与系统分区
  • linux的安装程序 与 文件 相关的命令
  • SAP_ABAP相关日语单词
  • Python中的除法操作详解
  • 第1章 人工智能的基础概念与应用导论
  • jenkins api部署时,一直提示pending-Finished waiting
  • AI在创造还是毁掉音乐之论文
  • C++ STL容器:序列式容器-数组string,vector,array,bitset
  • ElementUI样式优化:el-input修改样式、el-table 修改表头样式、斑马格样式、修改滚动条样式、
  • 大数据面试题之Spark(6)