首页 > 编程语言 >C# 如何验证PDF签名有效性

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

时间:2024-07-08 16:20:40浏览次数:15  
标签:验证 C# PdfSignatureFieldWidget 文档 签名 PDF 有效性

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

主要步骤:

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

验证结果:

 

 

使用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文档的完整性和电子签名的有效性,从而在处理重要文件时提供额外的安全保障。

 

相关文章推荐:

C# 在PDF中添加数字签名
C# 获取PDF数字签名证书
C# 加密、解密PDF文档

标签:验证,C#,PdfSignatureFieldWidget,文档,签名,PDF,有效性
From: https://www.cnblogs.com/Yesi/p/18290140

相关文章

  • 《DNK210使用指南 -CanMV版 V1.0》第十章 板卡信息实验
    第十章板卡信息实验1)实验平台:正点原子DNK210开发板2)章节摘自【正点原子】DNK210使用指南-CanMV版V1.03)购买链接:https://detail.tmall.com/item.htm?&id=7828013987504)全套实验源码+手册+视频下载地址:http://www.openedv.com/docs/boards/k210/ATK-DNK210.html5)正点原子......
  • C# jpg格式转dicom格式
    安装Nuget包:fo-dicom5.1.2版本代码如下:///<summary>///转换为Dicom格式///</summary>///<paramname="patId">患者ID</param>///<paramname="pisId">影像唯一号</param>///<paramname="textId">访......
  • SciTech-POLIR-Statistics-重要的统计数据来源 与 数据建模
    重要数据来源:官员与人口分布建模:9000万“党员”方可称为“人民”,因为党员才有“参政议政”资格;其他13亿多“群众”大多数是“经营、生产与劳动”,无法(或只有极少数)“参政议政”被“代表”.对于“政事”,只在“人民”(党员)的组织内决策、分级授权与分发及公布?因为全......
  • 利用Python进行数据分析PDF下载经典数据分享推荐
    本书由Pythonpandas项目创始人WesMcKinney亲笔撰写,详细介绍利用Python进行操作、处理、清洗和规整数据等方面的具体细节和基本要点。第2版针对Python3.6进行全面修订和更新,涵盖新版的pandas、NumPy、IPython和Jupyter,并增加大量实际案例,可以帮助你高效解决一系列数据分析问题。......
  • go 使用websocket
    packagechatimport( "encoding/json" "github.com/gorilla/websocket" "github.com/zeromicro/go-zero/core/logx" "log" "net/http" "sync")typeClientstruct{ conn*websocket.Conn......
  • 海外短剧系统CPS平台源码搭建 ,海量正版短剧推广分佣
    海外短剧cps推广分佣系统,短剧平台的分销推广功能,这个功能它到底有啥优点呢?做海外短剧怕不懂海外市场、怕海外做不出流量、怕入不敷出,海外运营推广困难等等。综合上述问题总结出了一点,就是流量问题,海外短剧推广都会用tiktok、facebook、Twitter、去推广,这个无可厚非,目前海外短......
  • AIGC:重塑创意产业的“未来”力量
    在2024年世界人工智能大会(WAIC)的璀璨舞台上,AI生成内容(AIGC)无疑成为了最耀眼的明星。从快手宣布即将上线的首部无演员、全AI生成的奇幻短剧《山海奇镜之劈波斩浪》,到“AIGC+”如何深度链接千行百业的圆桌论坛,再到出门问问现场展示的AIGC产品矩阵,无不昭示着这一技术正以前所未有......
  • 使用F1C200S从零制作掌机之构建debian文件系统
    前情:使用buildrootfs构建的文件系统调试了很久NES模拟器,执行InfoNES模拟器的时候一直黑屏,无内容显示,调不通了,所以改用debian系统试试。一、环境配置首先下载两个工具:qemu-arm-static和debootstrap。qemu-arm-static:通过qemu-arm-static,我们在x86的UbuntuPC机上,可以模拟A......
  • [UVM]IC验证自动结束仿真函数——uvm_top.set_timeout/set_report_max_quit_count
    Title:[UVM]IC验证自动结束仿真函数——uvm_top.set_timeout/set_report_max_quit_count文章目录1-前言2-uvm_top.set_timeout3-set_report_max_quit_count4-运用5-小结1-前言​数字IC验证过程中,需要运行不同Testcase,有些TC会因为TC配置、TB机制等原因,导致m......
  • 白帽工具箱:DVWA中CSRF攻击与防御的入门指南
    ......