使用C#代碼驗證和獲取PDF中的數(shù)字簽名
使用數(shù)字簽名保護(hù) PDF 對于確保文檔的完整性和不可否認(rèn)性至關(guān)重要。在此背景下,能夠驗證數(shù)字簽名同樣重要。有效的簽名意味著文檔自簽名以來未被篡改,并且確實來自所聲明的來源。
在處理數(shù)字簽名時,有時您可能還希望獲取簽名的證書,以了解其頒發(fā)者信息、主題信息、序列號及有效期等。本文將向您介紹如何在 C# 中使用 Spire.PDF for .NET 驗證或獲取 PDF 中的數(shù)字簽名。
安裝 Spire.PDF for .NET
首先,您需要將 Spire.PDF for .NET 包中包含的 DLL 文件添加為 .NET 項目的引用。這些 DLL 文件可以通過此鏈接下載,或者通過 NuGet 進(jìn)行安裝。
PM> Install-Package Spire.PDF
使用 C# 驗證 PDF 中的數(shù)字簽名
Spire.PDF for .NET 提供了 PdfSignature.VerifySignature() 方法,可直接檢查 PDF 文檔中數(shù)字簽名的有效性。
示例代碼如下:
using Spire.Pdf;
using Spire.Pdf.Security;
using Spire.Pdf.Widget;
namespace GetSignatureCertificate
{
class Program
{
static void Main(string[] args)
{
//創(chuàng)建 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() 方法。如果結(jié)果顯示文檔已被篡改,則說明簽名將失效,文檔的完整性將受到破壞。
示例代碼如下:
using Spire.Pdf;
using Spire.Pdf.Security;
using Spire.Pdf.Widget;
namespace GetSignatureCertificate
{
class Program
{
static void Main(string[] args)
{
//創(chuàng)建 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 中數(shù)字簽名的證書
用于簽署 PDF 文件的數(shù)字證書通常包含多種信息,用于驗證頒發(fā)者的身份。使用 Spire.PDF for .NET,您可以通過 PdfSignatureFieldWidget.Signature.Certificate 屬性獲取 PDF 文件中的證書。
示例代碼如下:
using Spire.Pdf;
using Spire.Pdf.Widget;
namespace GetSignatureCertificate
{
class Program
{
static void Main(string[] args)
{
//創(chuàng)建 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();
}
}
}到此這篇關(guān)于使用C#代碼驗證和獲取PDF中的數(shù)字簽名的文章就介紹到這了,更多相關(guān)C#驗證和獲取PDF數(shù)字簽名內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
使用C#在Word文檔中自動化創(chuàng)建與定制圖表
在辦公自動化需求不斷增長的今天,越來越多的企業(yè)希望將數(shù)據(jù)可視化工作融入自動化文檔生成流程中,過去,我們通常依賴 Excel 或 PowerPoint 來制作圖表,再手工插入到 Word 文檔中,本文將演示如何在 Word 文檔中創(chuàng)建圖表,需要的朋友可以參考下2025-12-12
DevExpress實現(xiàn)自定義TreeListNode的Tooltip的方法
這篇文章主要介紹了DevExpress實現(xiàn)自定義TreeListNode的Tooltip的方法,需要的朋友可以參考下2014-08-08

