PDF控件Spire.PDF for .NET【安全】演示:获取并验证 PDF 中的数字签名

在 PDF 中创建数字签名广泛用于保护 PDF 文件。因此,当您查看一些带有数字签名的PDF文件时,需要获取并验证数字签名。本文向您展示了一种通过使用Spire.PDF和 C# 代码来获取和验证 PDF 中的数字签名的解决方案。

Spire.PDF for .NET 是一款独立 PDF 控件,用于 .NET 程序中创建、编辑和操作 PDF 文档。使用 Spire.PDF 类库,开发人员可以新建一个 PDF 文档或者对现有的 PDF 文档进行处理,且无需安装 Adobe Acrobat。

E-iceblue 功能类库Spire 系列文档处理组件均由中国本土团队研发,不依赖第三方软件,不受其他国家的技术或法律法规限制,同时适配国产操作系统如中科方德、中标麒麟等,兼容国产文档处理软件 WPS(如 .wps/.et/.dps 等格式

Spire.PDF for.net下载   Spire.PDF for java下载

确保 Spire.PDF for .NET(版本 2.9 或更高版本)已正确安装。在下载的 Bin 文件夹中添加 Spire.PDF.dll 作为参考,路径如下:“..\Spire.PDF\Bin\NET4.0\ Spire.PDF.dl”。

下面是如何获取和验证数字签名的C#代码片段:

加载带有数字签名的 PDF 文件。

string filename = @"..\..\DigitalSignature.pdf";

获取 PDF 中的所有签名:

[C#]

List<PdfSignature> signatures = new List<PdfSignature>();PdfDocument doc = new PdfDocument(filename);PdfFormWidget form = (PdfFormWidget)doc.Form;
for (int i = 0; i < form.FieldsWidget.Count; ++i)
{
PdfSignatureFieldWidget field = form.FieldsWidget[i] as PdfSignatureFieldWidget;if (field != null && field.Signature != null)
{
PdfSignature signature = field.Signature;
signatures.Add(signature);
}
}

获取第一个签名:

[C#]

PdfSignature signatureOne = signatures[0];

验证签名:

[C#]

try
{
bool bSignature = signatureOne.VerifySignature();
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
Console.ReadLine();
}

获取签名日期:

[C#]

DateTime date = signatureOne.Date;

获取签名开始和结束有效的日期:

[C#]

DateTime validStart = certificate.NotBefore;
DateTime validEnd = certificate.NotAfter;

获取证书的版本:

[C#]

int version = certificate.Version;

从证书中获取主题专有名称:

[C#]

string subject = certificate.Subject;

请查看有效截图如下:

PDF数字签名

以上便是如何取并验证 PDF 中的数字签名,如果您有其他问题也可以继续浏览本系列文章,获取相关教程~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/604073.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Linux】常用的基本命令指令①

前言&#xff1a;从今天开始&#xff0c;我们逐步的学习Linux中的内容&#xff0c;和一些网络的基本概念&#xff0c;各位一起努力呐&#xff01; &#x1f496; 博主CSDN主页:卫卫卫的个人主页 &#x1f49e; &#x1f449; 专栏分类:数据结构 &#x1f448; &#x1f4af;代码…

CLIP is Also an Efficient Segmenter

表1 复现结果–Seed&#xff1a;70.7245673447014&#xff0c;dCRF&#xff1a;74.85437742935268 误差小于0.5个点&#xff0c;可以接受 表4 复现结果–训练300轮&#xff0c;Val&#xff1a;58.76741354153312&#xff0c;Test&#xff1a;59.18210 感想 VOC全部复现完成&…

基于SpringBoot的校园外卖服务系统

文章目录 项目介绍主要功能截图:部分代码展示设计总结项目获取方式🍅 作者主页:超级无敌暴龙战士塔塔开 🍅 简介:Java领域优质创作者🏆、 简历模板、学习资料、面试题库【关注我,都给你】 🍅文末获取源码联系🍅 项目介绍 基于SpringBoot的校园外卖服务系统,java…

小白入门基础 - tomcat

一&#xff1a;前言 Tomcat 服务器是一个免费的开放源代码的 Web 应用服务器&#xff0c;属于轻量级应用服务器&#xff0c;在中小型系统和并发访问用户不是很多的场合下被普遍使用&#xff0c;是开发和调试JSP 程序的首选。对于一个初学者来说&#xff0c;可以这样认为&#x…

xxxView

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、pandas是什么&#xff1f;二、使用步骤 1.引入库2.读入数据总结 前言 提示&#xff1a;这里可以添加本文要记录的大概内容&#xff1a; 例如&#xff1a;…

【INTEL(ALTERA)】生产中使用多个目标设备,如何满足外部内存接口Intel Agilex® 7偏移匹配准则?

说明 对于外部内存接口Intel Agilex 7使用的引脚&#xff0c;不同的引脚兼容设备可能会有不同的封装延迟。如果您遵循《外部内存接口用户指南》中的“偏移匹配指南”部分所述的要求&#xff0c;您可能会发现无法同时满足多个器件的要求。用户指南仅适用于您计划在开发阶段使用…

【SpringBoot+dubbo+zk】实现服务之间rpc通信

0)前置准备&#xff0c;我们使用zk作为注册中心&#xff0c;先启动zk&#xff0c;也就是2181端口。 1)父工程pom.xml <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http…

【软件测试】概述

《软件缺陷》 定义 &#xff08;从产品内部看&#xff09;软件产品开发或维护过程中存在的错误、毛病等各种问题&#xff08;从产品外部看&#xff09;系统所需要实现的某种功能的失效或违背 表现形式(1) 软件没有实现产品规格说明所要求的功能模块(2) 软件中出现了产品规格说…

SpringBoot2.7升级项目到Springboot3踩坑指南

文章目录 概要国内顶级开源项目升级情况适配SpringBoot3指南技术细节小结 概要 由于SpringBoot3.x全面拥抱JDK17,兼容jdk21&#xff0c;jdk17乃是大势所趋。这里是从SpringBoot2.7-->SpringBoot3.1踩坑指南。 提前阅读&#xff1a;jdk8升级JDK17避坑指南&#xff08;适用于…

Transformer-MM-Explainability

two modalities are separated by the [SEP] token&#xff0c;the numbers in each attention module represent the Eq. number. E h _h h​ is the mean&#xff0c; ∇ \nabla ∇A : ∂ y t ∂ A {∂y_t}\over∂A ∂A∂yt​​for y t y_t yt​ which is the model’s out…

写字母(文件)

请编写函数&#xff0c;将大写字母写入文件中。 函数原型 void WriteLetter(FILE *f, int n);说明&#xff1a;参数 f 为文件指针&#xff0c;n 为字母数目(1 ≤ n ≤ 26)。函数将前 n 个大写英文字母写入 f 所指示的文件中。 裁判程序 #include <stdio.h> #include &…

书生·浦语大模型实战营 Lesson 1

书生浦语大模型全链路开源体系 书生浦语大模型开源历程 书生浦语大模型系列 从模型到应用 数据 预训练 微调 部署

Raect中自定义hook

一、自定义Hook 自定义Hook&#xff1a;将一些常用的、跨越多个组件的Hook功能&#xff0c;抽离出去形成一个函数&#xff0c;该函数就是自定义Hook&#xff0c;自定义Hook&#xff0c;由于其内部需要使用Hook功能&#xff0c;所以它本身也需要按照Hook的规则实现&#xff1a;…

【华为OD真题 Python】攀登者2

文章目录 题目描述示例1输入输出说明示例2输入输出说明实现代码题目描述 攀登者喜欢寻找各种地图,并且尝试攀登到最高的山峰。 地图表示为一维数组,数组的索引代表水平位置,数组的高度代表相对海拔高度。其中数组元素0代表地面。 例如[0,1,4,3,1,0,0,1,2,3,1,2,1,0], 代表…

linux进程管理工具的使用(supervisorctl、systemd、init.d、Upstart、Monit、runit、Daemontools)

1、supervisorctl&#xff1a; 这是Supervisor提供的命令行客户端&#xff0c;Supervisor是一个进程控制系统。它用于在UNIX类操作系统上控制和监视进程。它通常用于服务器环境中管理长时间运行的进程。 Supervisor 是一个用于监控和控制 UNIX 系统上的进程的程序。它不是大多…

向量数据库:usearch的简单使用+实现图片检索应用

usearch的简单使用 usearch是快速开源搜索和聚类引擎&#xff0c;用于C、C、Python、JavaScript、Rust、Java、Objective-C、Swift、C#、GoLang和Wolfram &#x1f50d;中的向量和&#x1f51c;字符串 // https://github.com/unum-cloud/usearch/blob/main/python/README.md …

第7章-第5节-Java中的比较器comparator和泛型的简单说明

1、 引入 上个章节中我们在使用TreeSet保存自定义数据类型的时候&#xff0c;类必须要实现Comparable这个接口&#xff0c;然后重写CompareTo这个方法&#xff0c;这个必须是在具体的自定义类内部去写&#xff0c;有时不方便&#xff0c;每遇到一个都要在那个类内部去写这个Co…

vs c++ qt 叫请求的json 输出到输出终端

1 接收数据 std::string response ""; //设置数据接收函数 curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, Utils::req_reply); // 设置写入数据的缓冲区 curl_easy_setopt(curl, CURLOPT_WRITEDATA, (void*)&response); 2 打印 数据类型 qDebug() << &q…

10-单例模式(Singleton)

意图 保证一个类只有一个实例&#xff0c;并提供一个访问它的全局访问点 实现 1 懒汉式&#xff0c;线程不安全 public class Singleton { private static Singleton instance; private Singleton (){} public static Singleton getInstance() { if (instance null) {…

第7章-第4节-Java中的Set集合和自然排序compareble

1、HashSet&#xff1a; 1&#xff09;、 Set集合的特点 元素存储可以有序&#xff0c;可以无序&#xff08;要看选择的具体子类 HashSet 无序 LinkedHashSet&#xff08;有序&#xff09;,TreeSet&#xff08;排序&#xff09;&#xff09; 没有索引&#xff0c;不能通过索引…