Diese Seite kann automatisch übersetzten Text enthalten.

Entschlüsseln Sie PDF-Dokumente in C# und VB.NET

Ein PDF-Dokument kann mit Passwörtern oder Zertifikaten geschützt oder nicht geschützt sein.

Es gibt unterschiedliche Ansätze zum Öffnen von PDF-Dokumenten. Die empfohlene Methode besteht darin, zunächst zu prüfen, ob eine PDF-Datei gesichert ist. Die Alternative besteht darin, zu versuchen, ein beliebiges PDF-Dokument zu öffnen, ohne vorher zu prüfen, ob es verschlüsselt ist oder nicht. Die Bibliothek Docotic.Pdf löst CannotDecryptPdfException Ausnahmen für Dokumente aus, die ein Passwort oder Zertifikat erfordern.

PDF entschlüsseln, Passwort aus PDF in C# und VB.NET entfernen

Überprüfen Sie, ob ein PDF-Dokument geschützt ist

Die Bibliothek bietet GetEncryptionInfo Methoden zum Überprüfen, ob ein PDF-Dokument verschlüsselt ist. Diese Methoden stellen auch Informationen über den Verschlüsselungshandler bereit, der zum Verschlüsseln des Dokuments verwendet wird.

Docotic.Pdf-Bibliothek 9.5.17615-dev Regressionstests 14,813 bestanden NuGet-Downloads insgesamt 4,924,084

Der folgende C#-Codeausschnitt zeigt, wie Sie überprüfen, ob eine PDF-Datei verschlüsselt ist:

var info = PdfDocument.GetEncryptionInfo(fileName);
if (info == null)
    Console.WriteLine("Ist nicht verschlüsselt");
else if (info is PdfStandardEncryptionInfo standardInfo)
    Console.WriteLine("Wird mit einem Passwort verschlüsselt");
else if (info is PdfPublicKeyEncryptionInfo publicKeyInfo)
    Console.WriteLine("Ist mit einem oder mehreren digitalen Zertifikaten verschlüsselt");

Für viele mit Passwörtern verschlüsselte PDF-Dokumente ist zum Öffnen kein Passwort erforderlich. Für solche PDF-Dateien ist nur für den „Owner“-Modus (uneingeschränkt) ein Passwort erforderlich.

if (standardInfo.RequiresPasswordToOpen)
    Console.WriteLine("Kann ohne Passwort nicht geöffnet werden");
else
    Console.WriteLine("Erfordert kein Passwort");

Für ein mit Zertifikaten verschlüsseltes PDF-Dokument ist es möglich, Informationen über seine Empfänger abzurufen. Mit anderen Worten: Sie können prüfen, welche Zertifikate das PDF-Dokument entsperren können. Bitte beachten Sie, dass die Dokumentberechtigungen vom tatsächlichen Zertifikat abhängen, das zum Entschlüsseln der PDF-Datei verwendet wird.

// Die Recipients-Eigenschaft enthält Informationen zu Zertifikaten, die zum Entschlüsseln
// von PDF-Dokumenten verwendet werden können
foreach (var recipient in publicKeyInfo.Recipients)
    Console.WriteLine(recipient.SerialNumber);

Öffnen Sie verschlüsselte PDF-Dokumente in .NET

Ein mit Passwörtern verschlüsseltes PDF-Dokument kann zum Öffnen ein Passwort erfordern oder auch nicht. Verwenden Sie in beiden Fällen einen PdfDocument-Konstruktor, um das Dokument zu öffnen.

Wenn für die PDF-Datei kein Kennwort erforderlich ist, verwenden Sie einen Konstruktor ohne einen Entschlüsselungshandlerparameter. Die Bibliothek Docotic.Pdf öffnet das Dokument mit „Benutzer“-Berechtigungen (eingeschränkt).

Wenn zum Öffnen des PDF-Dokuments ein Kennwort erforderlich ist, verwenden Sie einen Konstruktor mit einem Handler vom Typ PdfStandardDecryptionHandler. Verwenden Sie denselben Konstruktor, wenn Sie eine gesicherte PDF-Datei mit „Eigentümer“-Berechtigungen (uneingeschränkt) öffnen möchten.

Der folgende Codeausschnitt zeigt, wie man eine passwortgeschützte PDF-Datei in C# öffnet:

using (var document = new PdfDocument(fileName, new PdfStandardDecryptionHandler("password")))
{
    // Machen Sie etwas mit dem entschlüsselten Dokument
}

Mit Zertifikaten verschlüsselte PDF-Dokumente benötigen zum Öffnen ein passendes Zertifikat. Für eine PDF-Datei kann es mehr als ein passendes Zertifikat geben. Der Autor des verschlüsselten PDF-Dokuments kann unterschiedliche Berechtigungen für verschiedene übereinstimmende Zertifikate erteilen.

Wenn im X.509-Zertifikatspeicher des aktuellen Benutzers ein passendes Zertifikat installiert ist, verwenden Sie einen PdfDocument-Konstruktor ohne einen Entschlüsselungshandlerparameter. Die Bibliothek Docotic.Pdf verwendet das erste passende Zertifikat aus dem Zertifikatspeicher und verwendet das Zertifikat zum Öffnen des Dokuments.

Wenn im X.509-Zertifikatspeicher des aktuellen Benutzers kein passendes/gewünschtes Zertifikat installiert ist, erstellen Sie eine PdfPublicKeyDecryptionHandler-Instanz und verwenden Sie sie mit einem PdfDocument-Konstruktor. Sie können einen Handler mithilfe eines Zertifikats, eines Schlüsselspeichers oder eines Zertifikatspeichers erstellen.

Der folgende C#-Codeausschnitt erstellt einen Public-Key-Entschlüsselungshandler mit einem Zertifikat aus einem Schlüsselspeicher. Dann wird der Handler verwendet, um eine zertifikatgeschützte PDF-Datei zu öffnen:

var handler = new PdfPublicKeyDecryptionHandler("key-store.p12", "password");
using (var document = new PdfDocument(fileName, handler))
{
    // Machen Sie etwas mit dem entschlüsselten Dokument
}

Entfernen Sie den Schutz von PDF-Dateien

Um den Schutz von einem PDF-Dokument zu entfernen, gehen Sie folgendermaßen vor:

  • Öffnen Sie das PDF mit einem PdfDocument-Konstruktor mit einem geeigneten Entschlüsselungshandler
  • Richten Sie keinen Verschlüsselungshandler in den Speicheroptionen ein.
  • Speichern Sie das PDF-Dokument

Ohne einen Verschlüsselungshandler speichert die Bibliothek das PDF-Dokument unverschlüsselt.

Um Passwörter aus einer PDF-Datei zu entfernen, öffnen Sie das Dokument mit einem Handler vom Typ PdfStandardDecryptionHandler. Für zertifikatgeschützte Dokumente verwenden Sie bitte einen Handler vom Typ PdfPublicKeyDecryptionHandler.

Überprüfen Sie die PDF-Berechtigungen in .NET

Um die für ein PDF-Dokument gewährten Berechtigungen zu überprüfen, müssen Sie das Dokument zuerst erstellen oder öffnen. Dabei spielt es keine Rolle, ob Sie eine verschlüsselte PDF-Datei oder eine Datei ohne Schutz öffnen.

Dieser Codeausschnitt zeigt, wie man PDF-Berechtigungen in C# überprüft:

// Erstellen Sie ein neues oder öffnen Sie ein vorhandenes Dokument
using (PdfDocument document = ...)
{
    Console.WriteLine("Document permissions = {0}", document.GrantedPermissions);
}