Diese Seite kann automatisch übersetzten Text enthalten.

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

Ein PDF-Dokument kann mit Kennwörtern, Zertifikaten oder ohne Schutz versehen sein.

Es gibt verschiedene Vorgehensweisen zum Öffnen von PDF-Dokumenten. Die empfohlene Methode besteht darin, zuerst zu prüfen, ob eine PDF-Datei geschützt ist. Die alternative Methode ist, zu versuchen, ein beliebiges PDF-Dokument zu öffnen, ohne vorher zu prüfen, ob es verschlüsselt ist. Die Docotic.Pdf-Bibliothek löst CannotDecryptPdfException-Ausnahmen für Dokumente aus, die ein Kennwort oder Zertifikat erfordern.

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

Prüfen, ob ein PDF-Dokument geschützt ist

Die Bibliothek stellt GetEncryptionInfo-Methoden bereit, um zu prüfen, ob ein PDF-Dokument verschlüsselt ist. Diese Methoden liefern außerdem Informationen über den zum Verschlüsseln des Dokuments verwendeten Verschlüsselungshandler.

Das folgende C#-Codefragment zeigt, wie geprüft wird, ob eine PDF-Datei verschlüsselt ist:

var info = PdfDocument.GetEncryptionInfo(fileName);
if (info == null)
    Console.WriteLine("Is not encrypted");
else if (info is PdfStandardEncryptionInfo standardInfo)
    Console.WriteLine("Is encrypted with a password");
else if (info is PdfPublicKeyEncryptionInfo publicKeyInfo)
    Console.WriteLine("Is encrypted with a digital certificate(s)");

Viele mit Kennwörtern verschlüsselte PDF-Dokumente benötigen kein Kennwort zum Öffnen. Für solche PDF-Dateien ist ein Kennwort nur für den „Eigentümer“-Modus (uneingeschränkt) erforderlich.

if (standardInfo.RequiresPasswordToOpen)
    Console.WriteLine("Can not be opened without a password");
else
    Console.WriteLine("Does not require a password");

Bei einem mit Zertifikaten verschlüsselten PDF-Dokument ist es möglich, Informationen über seine Empfänger zu erhalten. Anders ausgedrückt: Sie können prüfen, welche Zertifikate das PDF-Dokument entsperren können. Beachten Sie bitte, dass die Dokumentberechtigungen vom tatsächlich zum Entschlüsseln der PDF-Datei verwendeten Zertifikat abhängen.

// die Eigenschaft Recipients enthält Informationen über Zertifikate
// die zum Entschlüsseln des PDF-Dokuments verwendet werden können
foreach (var recipient in publicKeyInfo.Recipients)
    Console.WriteLine(recipient.SerialNumber);

Verschlüsselte PDF-Dokumente in .NET öffnen

Ein mit Kennwörtern verschlüsseltes PDF-Dokument kann ein Kennwort zum Öffnen benötigen, muss es aber nicht. Verwenden Sie in beiden Fällen einen PdfDocument-Konstruktor, um das Dokument zu öffnen.

Wenn die PDF-Datei kein Kennwort benötigt, verwenden Sie einen Konstruktor ohne Parameter für einen Entschlüsselungshandler. Die Docotic.Pdf-Bibliothek öffnet das Dokument mit „Benutzer“-(eingeschränkten) Berechtigungen.

Wenn das PDF-Dokument zum Öffnen ein Kennwort erfordert, verwenden Sie einen Konstruktor mit einem Handler vom Typ PdfStandardDecryptionHandler. Verwenden Sie denselben Konstruktor, wenn Sie eine geschützte PDF-Datei mit „Eigentümer“-(uneingeschränkten) Berechtigungen öffnen möchten.

Das folgende C#-Codefragment zeigt, wie eine kennwortgeschützte PDF-Datei in C# geöffnet wird:

using var document = new PdfDocument(fileName, new PdfStandardDecryptionHandler("password"));
// do something with the decrypted document

Mit Zertifikaten verschlüsselte PDF-Dokumente erfordern ein passendes Zertifikat zum Öffnen. Für eine PDF-Datei kann es mehr als ein passendes Zertifikat geben. Der Autor des verschlüsselten PDF-Dokuments kann für verschiedene passende Zertifikate unterschiedliche Berechtigungen gewähren.

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

Falls Sie im Zertifikatspeicher des aktuellen Benutzers für X.509 kein passendes bzw. gewünschtes Zertifikat installiert haben, erstellen Sie eine Instanz von PdfPublicKeyDecryptionHandler und verwenden Sie sie mit einem PdfDocument-Konstruktor. Sie können einen Handler mit einem Zertifikat, einem Keystore oder einem Zertifikatspeicher erstellen.

Das folgende C#-Codefragment erstellt einen Entschlüsselungshandler mit öffentlichem Schlüssel anhand eines Zertifikats aus einem Keystore. Anschließend wird der Handler verwendet, um eine zertifikatsgeschützte PDF-Datei zu öffnen:

var handler = new PdfPublicKeyDecryptionHandler("key-store.p12", "password");
using var document = new PdfDocument(fileName, handler);
// do something with the decrypted document

Schutz von PDF-Dateien entfernen

Um den Schutz aus einem PDF-Dokument zu entfernen, gehen Sie wie folgt vor:

  • öffnen Sie das PDF mit einem PdfDocument-Konstruktor mit einem geeigneten Entschlüsselungshandler
  • richten Sie in den Speicheroptionen keinen Verschlüsselungshandler ein
  • speichern Sie das PDF-Dokument

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

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

PDF-Berechtigungen in .NET prüfen

Um Berechtigungen für ein PDF-Dokument zu prü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.

Dieses Codefragment zeigt, wie PDF-Berechtigungen in C# geprüft werden:

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