使用C#代码验证和获取PDF中的数字签名

 更新时间:2025年11月21日 08:57:09   作者:2501_93070778  
使用数字签名保护 PDF 对于确保文档的完整性和不可否认性至关重要,在此背景下,能够验证数字签名同样重要,本文将向您介绍如何在 C# 中使用 Spire.PDF for .NET 验证或获取 PDF 中的数字签名,需要的朋友可以参考下

使用数字签名保护 PDF 对于确保文档的完整性和不可否认性至关重要。在此背景下,能够验证数字签名同样重要。有效的签名意味着文档自签名以来未被篡改,并且确实来自所声明的来源。

在处理数字签名时,有时您可能还希望获取签名的证书,以了解其颁发者信息、主题信息、序列号及有效期等。本文将向您介绍如何在 C# 中使用 Spire.PDF for .NET 验证或获取 PDF 中的数字签名。

安装 Spire.PDF for .NET

首先,您需要将 Spire.PDF for .NET 包中包含的 DLL 文件添加为 .NET 项目的引用。这些 DLL 文件可以通过此链接下载,或者通过 NuGet 进行安装。

PM> Install-Package Spire.PDF

使用 C# 验证 PDF 中的数字签名

Spire.PDF for .NET 提供了 PdfSignature.VerifySignature() 方法,可直接检查 PDF 文档中数字签名的有效性。

示例代码如下:

using Spire.Pdf;
using Spire.Pdf.Security;
using Spire.Pdf.Widget;

namespace GetSignatureCertificate
{
    class Program
    {
        static void Main(string[] args)
        {

            //创建 PdfDocument 对象
            PdfDocument pdf = new PdfDocument();

            //加载 PDF 文件
            pdf.LoadFromFile("PDFSignature.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];

                    //获取签名
                    PdfSignature signature = signatureFieldWidget.Signature;

                    //验证签名
                    bool valid = signature.VerifySignature();
                    if (valid)
                    {
                        Console.WriteLine("Valid signatures");
                    }
                    else
                    {
                        Console.WriteLine("Invalid signatures");
                    }
                }
            }
        }
    }
}

使用 C# 检测已签名的 PDF 是否被修改

要验证 PDF 文档在签名后是否被修改,可以使用 PdfSignature.VerifyDocModified() 方法。如果结果显示文档已被篡改,则说明签名将失效,文档的完整性将受到破坏。

示例代码如下:

using Spire.Pdf;
using Spire.Pdf.Security;
using Spire.Pdf.Widget;

namespace GetSignatureCertificate
{
    class Program
    {
        static void Main(string[] args)
        {

            //创建 PdfDocument 对象
            PdfDocument pdf = new PdfDocument();

            //加载 PDF 文档
            pdf.LoadFromFile("PDFSignature.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];

                    //获取签名
                    PdfSignature signature = signatureFieldWidget.Signature;

                    //检查文档在签名后是否被修改
                    bool modified = signature.VerifyDocModified();
                    if (modified)
                    {
                        Console.WriteLine("文档已被修改。");
                    }
                    else
                    {
                        Console.WriteLine("文档未被修改。");
                    }
                }
            }
        }
    }
}

使用 C# 获取 PDF 中数字签名的证书

用于签署 PDF 文件的数字证书通常包含多种信息,用于验证颁发者的身份。使用 Spire.PDF for .NET,您可以通过 PdfSignatureFieldWidget.Signature.Certificate 属性获取 PDF 文件中的证书。

示例代码如下:

using Spire.Pdf;
using Spire.Pdf.Widget;

namespace GetSignatureCertificate
{
    class Program
    {
        static void Main(string[] args)
        {
            //创建 PdfDocument 对象
            PdfDocument pdf = new PdfDocument();

            //加载 PDF 文件
            pdf.LoadFromFile("PDFSignature.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];

                    //获取签名的证书
                    string certificateInfo = signatureFieldWidget.Signature.Certificate.ToString();

                    //获取证书的格式
                    string format = signatureFieldWidget.Signature.Certificate.GetFormat();

                    //输出证书信息
                    Console.WriteLine(certificateInfo + "\n" + "[CertificateFormat]\n " + format);
                }
            }
            Console.ReadKey();
        }
    }
}

到此这篇关于使用C#代码验证和获取PDF中的数字签名的文章就介绍到这了,更多相关C#验证和获取PDF数字签名内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • C#实现汽车租赁系统项目

    C#实现汽车租赁系统项目

    这篇文章主要为大家详细介绍了C#实现汽车租赁系统项目,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-01-01
  • C#中深度复制和浅度复制详解

    C#中深度复制和浅度复制详解

    这篇文章主要介绍了C#中深度复制和浅度复制的相关资料,需要的朋友可以参考下
    2015-10-10
  • C#实现仿QQ抽屉式窗体的设计方法

    C#实现仿QQ抽屉式窗体的设计方法

    QQ软件对于绝大多数的人来说再熟悉不过了,它以使用方便、界面美观及功能完善而著称,本文给大家介绍了C#实现仿QQ抽屉式窗体的设计方法,主要通过使用API函数WindowFromPoint和GetParent实现仿QQ的抽屉式窗体,需要的朋友可以参考下
    2024-04-04
  • C#序列化与反序列化实例

    C#序列化与反序列化实例

    这篇文章主要介绍了C#序列化与反序列化的实现方法,实例分析了序列化与反序列化的原理与实现技巧,需要的朋友可以参考下
    2015-01-01
  • C#中事务处理和非事务处理方法实例分析

    C#中事务处理和非事务处理方法实例分析

    这篇文章主要介绍了C#中事务处理和非事务处理方法,较为详细的分析了C#中事务处理与非事务处理的使用技巧,对于使用C#进行数据库程序开发有一定参考借鉴价值,需要的朋友可以参考下
    2015-07-07
  • C#实现简单打字小游戏

    C#实现简单打字小游戏

    这篇文章主要为大家详细介绍了C#实现简单打字小游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-05-05
  • C#中Dictionary类使用实例

    C#中Dictionary类使用实例

    这篇文章主要介绍了C#中Dictionary类使用实例,本文直接给出一个使用实例,包含一些Dictionary的基本用法,需要的朋友可以参考下
    2015-06-06
  • 使用C#在Word文档中自动化创建与定制图表

    使用C#在Word文档中自动化创建与定制图表

    在办公自动化需求不断增长的今天,越来越多的企业希望将数据可视化工作融入自动化文档生成流程中,过去,我们通常依赖 Excel 或 PowerPoint 来制作图表,再手工插入到 Word 文档中,本文将演示如何在 Word 文档中创建图表,需要的朋友可以参考下
    2025-12-12
  • C# 在PDF中创建和填充域

    C# 在PDF中创建和填充域

    本文主要介绍了C# 在PDF中创建和填充域的相关知识。具有很好的参考价值,下面跟着小编一起来看下吧
    2017-03-03
  • DevExpress实现自定义TreeListNode的Tooltip的方法

    DevExpress实现自定义TreeListNode的Tooltip的方法

    这篇文章主要介绍了DevExpress实现自定义TreeListNode的Tooltip的方法,需要的朋友可以参考下
    2014-08-08

最新评论