使用C#驗證PDF數(shù)字簽名有效性的方法示例
引言
數(shù)字簽名作為PDF文檔中的重要安全機制,不僅能夠驗證文件的來源,還能確保文件內(nèi)容在傳輸過程中未被篡改。然而,如何正確驗證PDF文件的數(shù)字簽名,是確保文件完整性和可信度的關鍵。本文將詳細介紹如何使用免費.NET控件通過C#驗證PDF簽名的有效性以及驗證PDF文檔是否被修改。
使用C# 驗證PDF數(shù)字簽名有效性
Free Spire.PDF 提供了 PdfSignature
類用于代表PDF文檔中的數(shù)字簽名,要驗證簽名的有效性可以用該類的 VerifySignature()
方法。
主要步驟:
- 創(chuàng)建
PdfDocument
對象,并使用LoadFromFile()
方法加載 PDF 文件。 - 獲取 PDF 文件中的表單,然后使用獲取表單字段集合。
- 遍歷所有字段,并判斷當前字段是否為簽名字段(
PdfSignatureFieldWidget
類)。 - 如果是簽名字段,則通過
PdfSignatureFieldWidget.Signature
屬性獲取該PDF 簽名。 - 使用
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; //驗證簽名有效性 bool valid = signature.VerifySignature(); if (valid) { Console.WriteLine("有效簽名"); } else { Console.WriteLine("無效簽名"); } } } } } }
驗證結(jié)果:
使用C# 驗證PDF文檔是否被修改
驗證PDF文檔是否被修改也能間接驗證電子簽名的有效性,如果在簽名之后文檔內(nèi)容被修改,那么PDF簽名也將失效。通過使用 PdfSignature
類提供的 VerifyDocModified()
方法可以快速驗證PDF文檔的完整性。
主要步驟:
- 創(chuàng)建
PdfDocument
對象,并使用LoadFromFile()
方法加載 PDF 文件 - 獲取 PDF 文件中的表單,然后使用獲取表單字段集合。
- 遍歷所有字段,并判斷當前字段是否為簽名字段(
PdfSignatureFieldWidget
類)。 - 如果是簽名字段,則通過
PdfSignatureFieldWidget.Signature
屬性獲取該PDF 簽名。 - 使用
PdfSignature.VerifyDocModified()
方法驗證簽名后文檔是否被修改。 - 輸出結(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; //驗證簽名后PDF文檔是否被修改 bool modified = signature.VerifyDocModified(); if (modified) { Console.WriteLine("文檔被修改了。"); } else { Console.WriteLine("文檔未被修改。"); } } } } } }
驗證結(jié)果:
通過這些步驟和示例代碼,我們可以確保PDF文檔的完整性和電子簽名的有效性,從而在處理重要文件時提供額外的安全保障。
以上就是使用C#驗證PDF數(shù)字簽名有效性的方法示例的詳細內(nèi)容,更多關于C#驗證PDF數(shù)字簽名有效性的資料請關注腳本之家其它相關文章!
相關文章
c# 線程定時器 System.Threading.Timer的使用
本文主要介紹了c# 線程定時器 System.Threading.Timer的使用,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2023-02-02C#利用System.Threading.Thread.Sleep即時輸出信息的詳解
本篇文章是對C#利用System.Threading.Thread.Sleep即時輸出信息進行了詳細的分析介紹,需要的朋友參考下2013-06-06C#?winform實現(xiàn)中英文切換功能的四種方式
這篇文章主要介紹了在C#?winform應用程序中實現(xiàn)中英文切換功能的四種方式,資源文件(Resources),本地化(Localization),動態(tài)設置控件字體和切換語言環(huán)境這四種方式,下面將詳細介紹每種方式及其具體實現(xiàn),并討論它們的優(yōu)缺點,需要的朋友可以參考下2024-04-04C#將部分Controls數(shù)據(jù)導入對象并存入ini中的操作方法
在Winform設計中,經(jīng)常需要將控件數(shù)據(jù)導出到屬性或字段中,本文詳細介紹了如何優(yōu)化這一過程,包括控件和屬性的遍歷,以及使用FieldInfo的getSet函數(shù)和Ini類庫來實現(xiàn)數(shù)據(jù)的有效存儲和轉(zhuǎn)換,感興趣的朋友跟隨小編一起看看吧2024-10-10ftp服務器搭建部署與C#實現(xiàn)ftp文件的上傳的示例
本文主要介紹了ftp服務器搭建部署與C#實現(xiàn)ftp文件的上傳的示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2022-07-07