使用C#代码验证和获取PDF中的数字签名
作者: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数字签名内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
