PDF控件Spire.PDF for .NET【安全】演示:获取 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允许获取和验证PDF文件中的特定签名,现在从3.8.82版本开始,Spire.PDF支持获取PDF签名中的所有证书。在本文中,我们将向您展示如何使用 Spire.PDF 完成此任务的步骤。

为了进行演示,我们使用了一个 PDF 模板文件,其中包含两个证书:

如何获取PDF签名中的所有证书

代码片段:

步骤 1:实例化 PdfDocument 对象并加载 PDF 文件。

PdfDocument doc = new PdfDocument();
doc.LoadFromFile("UPS.pdf");

步骤2:创建一个List对象。

List<PdfSignature> signatures = new List<PdfSignature>();

步骤3:从PDF文件中获取所有签名并将它们添加到列表对象中。

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

步骤4:从列表中获取第一个签名,然后从该签名中获取所有证书。

PdfSignature signatureOne = signatures[0];
X509Certificate2Collection collection = signatureOne.Certificates;

有效截图

如何获取PDF签名中的所有证书

完整代码

using System;
using System.Collections.Generic;
using System.Security.Cryptography.X509Certificates;
using Spire.Pdf;
using Spire.Pdf.Security;
using Spire.Pdf.Widget;

namespace Get_all_certificates_in_PDF_signature
{
class Program
{
static void Main(string[] args)
{
PdfDocument doc = new PdfDocument();
doc.LoadFromFile("UPS.pdf");
List<PdfSignature> signatures = new List<PdfSignature>();
var form = (PdfFormWidget)doc.Form;
for (int i = 0; i < form.FieldsWidget.Count; ++i)
{
var field = form.FieldsWidget[i] as PdfSignatureFieldWidget;

if (field != null && field.Signature != null)
{
PdfSignature signature = field.Signature;
signatures.Add(signature);
}
}
PdfSignature signatureOne = signatures[0];
X509Certificate2Collection collection = signatureOne.Certificates;
foreach (var certificate in collection)
{
Console.WriteLine(certificate.Subject);
}
Console.ReadKey();
}
}
}

以上便是如测 PDF 文档是否受密码保护,如果您有其他问题也可以继续浏览本系列文章,获取相关教程~

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

golang实现延迟队列(delay queue)

golang实现延迟队列 1 延迟队列&#xff1a;邮件提醒、订单自动取消 延迟队列&#xff1a;处理需要在未来某个特定时间执行的任务。这些任务被添加到队列中&#xff0c;并且指定了一个执行时间&#xff0c;只有达到指定的时间点时才能从队列中取出并执行。 应用场景&#xff1…

Linux的Ubuntu的APT使用

Linux的Ubuntu的APT使用 apt 介绍 apt 是 Advanced Packaging Tool 的简称&#xff0c;是一款安装包管理工具。在 Ubuntu 下&#xff0c;我们可以使用 apt 命令进行软件包的安装、删除、清理等&#xff0c;类似于 Windows 中的软件管理工具。 Ubuntu 软件操作的相关命令 su…

042-WEB攻防-PHP应用MYSQL架构SQL注入跨库查询文件读写权限操作

042-WEB攻防-PHP应用&MYSQL架构&SQL注入&跨库查询&文件读写&权限操作 #知识点&#xff1a; 1、PHP-MYSQL-SQL注入-常规查询 2、PHP-MYSQL-SQL注入-跨库查询 3、PHP-MYSQL-SQL注入-文件读写 演示案例&#xff1a; ➢PHP-MYSQL-Web组成架构 ➢PHP-MYSQL-SQL…

python自动化接口测试

前几天&#xff0c;同组姐妹说想要对接口那些异常值进行测试&#xff0c;能否有自动化测试的方法。仔细想了一下&#xff0c;工具还挺多&#xff0c;大概分析了一下&#xff1a; 1、soapui:可以对接口参数进行异常值参数化&#xff0c;可以加断言&#xff0c;一般我们会加http…

undo日志详解

一、undo日志介绍 上一节详细的说了redo日志&#xff0c;redo日志的功能就是把增删改操作都记录着&#xff0c;如果断电导致内存中的脏页丢失&#xff0c;可以根据磁盘中的redo日志文件进行恢复。redo日志被设计出来是为了保证数据库的持久性&#xff0c;undo日志设计出来是为…

从故宫修建看「软件物料清单」的重要性 @安全历史01

故宫&#xff0c;这座中国传统文化的重要代表和象征性建筑已屹立近600年&#xff0c;是世界上现存规模最大、保存最为完整的木质结构古建筑之一。 故宫之所以能至今保存完好&#xff0c;除持续保护和修缮外&#xff0c;其使用的木材和砖石等材料也经过了精挑细选&#xff0c;保…

一周学会Django5 Python Web开发-Django5路由重定向

锋哥原创的Python Web开发 Django5视频教程&#xff1a; 2024版 Django5 Python web开发 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili2024版 Django5 Python web开发 视频教程(无废话版) 玩命更新中~共计25条视频&#xff0c;包括&#xff1a;2024版 Django5 Python we…

图片速览 PrintListener: 通过手指摩擦声发现指纹认证漏洞

原有一些方法主要是用字典猜测的方式来解锁的&#xff0c;文章的方法利用了用户滑手机屏幕产生的声音来辅助指纹的生成&#xff0c;且本文所提方案的准确性要更高(文章采样了各种环境、各种情况的数据&#xff0c;详见原文)。 PrintListener的攻击场景广泛且隐蔽。它只需要记录…

小米标准模组+MCU 快速上手开发(一)——之固件下载

小米标准模组+MCU 开发笔记之固件下载 背景技术名词简介● 小米IoT开发者平台● 小米IoT 模组● ESP系列简介问题描述 + 解决方式问题1:固件下载是否有示例,如何下载到硬件板卡中?问题2:固件下载的官方程序是什么?在哪里?该如何使用?问题3:固件下载时,Flash和Ram 有什…

安全这么卷了吗?北京,渗透,4k,不包吃住,非实习

起初某HR找人发了条招聘信息 看到被卷到4k一个月被震惊到了 随后发布了朋友圈&#xff0c;引起来众多讨论 对此网友发表众多评价 越来越卷的工作现象确实是一个普遍存在的问题 另外&#xff0c;也可以考虑和雇主沟通&#xff0c; 寻求更合理的工作安排&#xff0c; 或者…

C#,大规模图(Large Graph)的均匀成本搜索之迪杰斯特拉(Dijkstra)算法与源代码

1 均匀成本搜索 均匀成本搜索是迪杰斯特拉算法的变体。这里&#xff0c;我们不是将所有顶点插入到一个优先级队列中&#xff0c;而是只插入源&#xff0c;然后在需要时一个接一个地插入。在每一步中&#xff0c;我们检查项目是否已经在优先级队列中(使用访问数组)。如果是&…

flink反压

flink反压&#xff08;backpressure&#xff09;&#xff0c;简单来说就是当接收方的接收速率低于发送方的发送速率&#xff0c;这时如果不做处理就会导致接收方的数据积压越来越多直到内存溢出&#xff0c;所以此时需要一个机制来根据接收方的状态反过来限制发送方的发送速率&…

精英ECS Z97-MACHINE V1.0 BIOS MX25L6406E

官网上的两个BIOS我都无法亮机&#xff0c;这是我保存出来的BIOS&#xff0c;不知道是否能使用五代的处理器 官网&#xff1a;Z97-MACHINE&#xff5c;Motherboard&#xff5c;产品&#xff5c;ECS 精英电脑 国外老哥的看法&#xff1a;ECS Z97-MACHINE Closer Look: The BIO…

手拉手助成长社会融合实践活动之新春送温暖

2月21日上午来自合肥市第四十五中学橡树湾校区七(15)中队、共青团合肥市第六中学2023级36班委员会的40多名同学&#xff0c;带来了龙年的礼物看望陪伴合肥市庐阳区为民社会工作服务中心幸福小院的兄弟姐妹。 大家详细地了解了幸福小院孩子们学习、康复和社会实践及能力提升情况…

CSS列表学习2

之前学习了列表&#xff1b;继续熟悉&#xff1b; <!DOCTYPE html> <html> <head> <meta http-equiv"Content-Type" content"text/html; charsetutf-8"/><title></title><meta charset"utf-8" /><…

通用性技术底座AI大模型与各行业专用性AI小模型搭建(第二篇)

五、小模型架构选择问题 在选择行业专用AI小模型的架构时&#xff0c;需要考虑以下几个关键因素&#xff1a; 1. **任务类型**&#xff1a; - 不同的任务类型&#xff08;如分类、回归、序列生成、图像识别等&#xff09;对应着不同的模型结构。例如&#xff0c;文本分类问…

Ansible cron模块 适用于管理计划任务 设置多个计划任务

目录 选项添加一个计划任务检查是否添加成功删除计划任务检查是否执行成功 选项 其使用的语法跟我们的crontab文件中的语法一致&#xff0c;同时&#xff0c;可以指定以下选项&#xff1a; day #日应该运行的工作( 1-31, , /2, ) hour # 小时 ( 0-23, , /2, ) minute #分钟( 0…

Leetcode 26-30题

删除有序数组中的重复项 给定一个有序数组&#xff0c;要求原地删除重复出现的元素&#xff0c;返回删除后的数组的长度。 这里的原地删除其实可以这样表示&#xff0c;用双指针从前往后扫一遍&#xff0c;遇到新的没出现过的元素就放到前面去&#xff0c;就可以实现删除后的数…

【杭州游戏业:创业热土,政策先行】

在前面的文章中&#xff0c;我们探讨了上海、北京、广州、深圳等城市的游戏产业现状。现在&#xff0c;我们切换视角&#xff0c;来看看另一个游戏创业热土——杭州的发展情况 最近第19届亚运会在杭州举办&#xff0c;本次亚运会上&#xff0c;电子竞技首次获准列为正式比赛项…

了解 Kubernetes

1 Kubernetes概述 1.1 k8s是什么 K8S 的全称为 Kubernetes (K12345678S)&#xff0c;PS&#xff1a;“嘛&#xff0c;写全称也太累了吧&#xff0c;不如整个缩写” 作用&#xff1a; 用于自动部署、扩展和管理“容器化&#xff08;containerized&#xff09;应用程序”的开…