C#如何快速檢測PDF是否加密并驗證正確密碼
引言
在批量文檔處理系統(tǒng)(如 OCR 文字識別、內(nèi)容提取、格式轉(zhuǎn)換)中,加密 PDF 無法直接操作。檢測加密狀態(tài)可提前篩選文件,避免流程因密碼驗證失敗而中斷。
本文使用 Free Spire.PDF for .NET(一個免費的.NET PDF處理庫),演示如何通過C# 檢測PDF是否加密,并驗證密碼的正確性。
Free Spire.PDF for .NET簡介
核心功能:
- 免費提供基礎(chǔ)的PDF創(chuàng)建、編輯和加密檢測功能
- 支持.NET Framework 和 .NET Core
- 無需Adobe依賴
安裝方式:
可以通過 NuGet 包管理器來完成安裝。打開 Visual Studio,在項目中右鍵點擊 "管理 NuGet 程序包",搜索 "Free Spire.PDF",然后選擇合適的版本進行安裝。
關(guān)鍵提示: 加密檢測 ≠ 破解工具。Spire.PDF僅對合法持有的文件進行操作。
C# 檢測PDF文檔是否加密
要檢測一個PDF文件的加密狀態(tài),可以直接使用 PdfDocument 類的 IsPasswordProtected(string fileName) 方法。該屬性返回一個布爾值,如果為true,表示 PDF 已加密;如果為false,表示 PDF 未加密。示例C#代碼如下:
using Spire.Pdf;
namespace CheckIfPdfIsProtected
{
class Program
{
static void Main(string[] args)
{
// 指定PDF文檔路徑
string pdfPath = "E:\\PythonPDF\\加密PDF.pdf";
// 檢測PDF文檔是否加密
bool isProtected = PdfDocument.IsPasswordProtected(pdfPath);
// 輸出結(jié)果
if (isProtected)
{
Console.WriteLine("該PDF已加密。");
}
else
{
Console.WriteLine("該PDF未加密。");
}
}
}
}輸出結(jié)果:

C# 測試PDF正確密碼
如果檢測到 PDF 已加密,接下來需要測試正確的密碼。Free Spire.PDF for .NET沒有直接的驗證密碼的接口,但是可以通過嘗試用密碼打開PDF文件并捕獲異常來驗證。
示例C#代碼如下:
using Spire.Pdf;
namespace DetermineTheCorrectPasswordOfPdf
{
class Program
{
static void Main(string[] args)
{
// 指定PDF文件和測試密碼
string pdfPath = "加密PDF.pdf";
string[] testPasswords = { "admin@2023", "abc", "12345" };
// 遍歷測試密碼
foreach (var pwd in testPasswords)
{
if (ValidatePdfPassword(pdfPath, pwd))
{
Console.WriteLine($"成功!正確密碼為:{pwd}");
break;
}
}
// 驗證PDF密碼的方法
static bool ValidatePdfPassword(string filePath, string password)
{
// 用測試密碼逐一打開PDF進行驗證
PdfDocument pdf = new PdfDocument();
try
{
pdf.LoadFromFile(filePath, password);
// 無異常 = 密碼正確
return true;
}
catch (Exception)
{
return false; // 密碼錯誤
}
finally
{
pdf.Close();
}
}
}
}
}輸出結(jié)果:

批量檢測+密碼測試 (完整企業(yè)級解決方案)
對于需要批量處理文檔應(yīng)用場景,如:
企業(yè)文檔管理:批量檢測加密 PDF 并嘗試常用密碼(如部門默認密碼),解決密碼遺忘導(dǎo)致的文檔訪問問題。
數(shù)據(jù)恢復(fù):針對恢復(fù)出的歷史加密文檔,通過預(yù)設(shè)密碼庫(如公司舊密碼)嘗試解密,提升數(shù)據(jù)可用性。
安全審計:批量檢測 PDF 密碼強度,發(fā)現(xiàn)可被簡單密碼破解的文件時提示弱密碼風險,推動密碼加固。
示例C#代碼如下:
using Spire.Pdf;
public class PdfSecurityChecker
{
public static void Main()
{
// 掃描指定文件夾中的每一個PDF文檔
string folderPath = @"F:\PDFs\";
foreach (string file in Directory.GetFiles(folderPath, "*.pdf"))
{
// 驗證PDF文檔是否加密
bool isProtected = PdfDocument.IsPasswordProtected(file);
Console.WriteLine($"{Path.GetFileName(file)} 是否加密: {isProtected}");
// 如果是加密的PDF文檔,逐一驗證正確密碼
if (isProtected)
{
TestPasswords(file, new[] { "default", "company_secret", "temp_pwd", "user123", "abc"});
}
}
}
// 驗證正確的密碼
private static void TestPasswords(string filePath, string[] passwords)
{
foreach (string pwd in passwords)
{
if (ValidatePdfPassword(filePath, pwd))
{
Console.WriteLine($" 驗證成功!密碼: {pwd}");
return;
}
}
Console.WriteLine(" 所有密碼測試失?。?);
}
static bool ValidatePdfPassword(string filePath, string password)
{
// 用測試密碼逐一打開PDF進行驗證
PdfDocument pdf = new PdfDocument();
try
{
pdf.LoadFromFile(filePath, password);
// 無異常 = 密碼正確
return true;
}
catch (Exception)
{
return false; // 密碼錯誤
}
finally
{
pdf.Close();
}
}
}總結(jié)
本文詳細介紹了使用Free Spire.PDF庫通過C#檢測PDF加密狀態(tài)和測試密碼的實用技術(shù)。關(guān)鍵點包括:
通過 IsPasswordProtected 方法檢測加密狀態(tài)
使用 LoadFromFile 方法用密碼逐一加載PDF文檔來測試密碼有效性
實現(xiàn)對多個PDF文檔的批量處理
到此這篇關(guān)于C#如何快速檢測PDF是否加密并驗證正確密碼的文章就介紹到這了,更多相關(guān)C#檢測PDF是否加密內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C# WinForm窗體編程中處理數(shù)字的正確操作方法
這篇文章主要介紹了C# WinForm窗體編程中處理數(shù)字的正確操作方法,本文給出了正確示例,并解釋了為什么要這么做,需要的朋友可以參考下2014-08-08
C#如何將查詢到的數(shù)據(jù)庫里面的數(shù)據(jù)輸出到textbox控件
這篇文章主要介紹了C#如何將查詢到的數(shù)據(jù)庫里面的數(shù)據(jù)輸出到textbox控件問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-07-07
C#實現(xiàn)將32位MD5摘要串轉(zhuǎn)換為128位二進制字符串的方法
這篇文章主要介紹了C#實現(xiàn)將32位MD5摘要串轉(zhuǎn)換為128位二進制字符串的方法,涉及C#字符串遍歷、加密與轉(zhuǎn)換相關(guān)操作技巧,需要的朋友可以參考下2017-04-04

