使用C#驗(yàn)證PDF數(shù)字簽名有效性的方法示例
引言
數(shù)字簽名作為PDF文檔中的重要安全機(jī)制,不僅能夠驗(yàn)證文件的來源,還能確保文件內(nèi)容在傳輸過程中未被篡改。然而,如何正確驗(yàn)證PDF文件的數(shù)字簽名,是確保文件完整性和可信度的關(guān)鍵。本文將詳細(xì)介紹如何使用免費(fèi).NET控件通過C#驗(yàn)證PDF簽名的有效性以及驗(yàn)證PDF文檔是否被修改。
使用C# 驗(yàn)證PDF數(shù)字簽名有效性
Free Spire.PDF 提供了 PdfSignature 類用于代表PDF文檔中的數(shù)字簽名,要驗(yàn)證簽名的有效性可以用該類的 VerifySignature() 方法。
主要步驟:
- 創(chuàng)建
PdfDocument對象,并使用LoadFromFile()方法加載 PDF 文件。 - 獲取 PDF 文件中的表單,然后使用獲取表單字段集合。
- 遍歷所有字段,并判斷當(dāng)前字段是否為簽名字段(
PdfSignatureFieldWidget類)。 - 如果是簽名字段,則通過
PdfSignatureFieldWidget.Signature屬性獲取該P(yáng)DF 簽名。 - 使用
PdfSignature.VerifySignature()方法檢查 PDF 簽名的有效性 - 輸出結(jié)果。
C#示例代碼:
using Spire.Pdf;
using Spire.Pdf.Security;
using Spire.Pdf.Widget;
namespace VerifySignature
{
class Program
{
static void Main(string[] args)
{
//加載PDF文檔
PdfDocument pdf = new PdfDocument();
pdf.LoadFromFile("PDF簽名.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];
//獲取PDF簽名
PdfSignature signature = signatureFieldWidget.Signature;
//驗(yàn)證簽名有效性
bool valid = signature.VerifySignature();
if (valid)
{
Console.WriteLine("有效簽名");
}
else
{
Console.WriteLine("無效簽名");
}
}
}
}
}
}
驗(yàn)證結(jié)果:

使用C# 驗(yàn)證PDF文檔是否被修改
驗(yàn)證PDF文檔是否被修改也能間接驗(yàn)證電子簽名的有效性,如果在簽名之后文檔內(nèi)容被修改,那么PDF簽名也將失效。通過使用 PdfSignature 類提供的 VerifyDocModified() 方法可以快速驗(yàn)證PDF文檔的完整性。
主要步驟:
- 創(chuàng)建
PdfDocument對象,并使用LoadFromFile()方法加載 PDF 文件 - 獲取 PDF 文件中的表單,然后使用獲取表單字段集合。
- 遍歷所有字段,并判斷當(dāng)前字段是否為簽名字段(
PdfSignatureFieldWidget類)。 - 如果是簽名字段,則通過
PdfSignatureFieldWidget.Signature屬性獲取該P(yáng)DF 簽名。 - 使用
PdfSignature.VerifyDocModified()方法驗(yàn)證簽名后文檔是否被修改。 - 輸出結(jié)果。
C#示例代碼:
using Spire.Pdf;
using Spire.Pdf.Security;
using Spire.Pdf.Widget;
namespace CheckSignature
{
class Program
{
static void Main(string[] args)
{
//加載PDF文檔
PdfDocument pdf = new PdfDocument();
pdf.LoadFromFile("PDF簽名.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];
//獲取PDF簽名
PdfSignature signature = signatureFieldWidget.Signature;
//驗(yàn)證簽名后PDF文檔是否被修改
bool modified = signature.VerifyDocModified();
if (modified)
{
Console.WriteLine("文檔被修改了。");
}
else
{
Console.WriteLine("文檔未被修改。");
}
}
}
}
}
}
驗(yàn)證結(jié)果:

通過這些步驟和示例代碼,我們可以確保PDF文檔的完整性和電子簽名的有效性,從而在處理重要文件時(shí)提供額外的安全保障。
以上就是使用C#驗(yàn)證PDF數(shù)字簽名有效性的方法示例的詳細(xì)內(nèi)容,更多關(guān)于C#驗(yàn)證PDF數(shù)字簽名有效性的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Unity2021發(fā)布WebGL與網(wǎng)頁交互問題的解決
本文主要介紹了Unity2021發(fā)布WebGL與網(wǎng)頁交互問題的解決,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-05-05
解析從源碼分析常見的基于Array的數(shù)據(jù)結(jié)構(gòu)動(dòng)態(tài)擴(kuò)容機(jī)制的詳解
本篇文章是對從源碼分析常見的基于Array的數(shù)據(jù)結(jié)構(gòu)動(dòng)態(tài)擴(kuò)容機(jī)制進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-05-05
關(guān)于C#中async/await的用法實(shí)例詳解
這篇文章主要介紹了關(guān)于C#中async/await的用法,今天寫一個(gè)demo徹底搞明白async/await的用法,代碼簡單易懂,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-02-02
C#實(shí)現(xiàn)讀取ini配置文件的內(nèi)容
INI就是擴(kuò)展名為"INI"的文件,其實(shí)他本身是個(gè)文本文件,可以用記事本打開,本文主要為大家詳細(xì)介紹了C#實(shí)現(xiàn)讀取ini配置文件內(nèi)容的方法,需要的小伙伴可以了解下2023-12-12
C#實(shí)現(xiàn)學(xué)員信息管理系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了C#實(shí)現(xiàn)學(xué)員信息管理系統(tǒng),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-06-06
C#開發(fā)Android百度地圖手機(jī)應(yīng)用程序(多地圖展示)
這篇文章主要介紹了C#開發(fā)Android百度地圖手機(jī)應(yīng)用程序(多地圖展示)的相關(guān)資料,需要的朋友可以參考下2016-02-02

