Questa pagina può contenere testo tradotto automaticamente.

Decifrare documenti PDF in C# e VB.NET

Un documento PDF può essere protetto con password, certificati oppure non essere protetto.

Esistono diversi approcci per aprire documenti PDF. Il metodo consigliato è verificare prima se un file PDF è protetto. L'alternativa è provare ad aprire qualsiasi documento PDF senza controllare prima se sia crittografato o meno. La libreria Docotic.Pdf genera eccezioni CannotDecryptPdfException per i documenti che richiedono una password o un certificato.

Decifrare PDF, rimuovere la password da PDF in C# e VB.NET

Verificare se un documento PDF è protetto

La libreria fornisce metodi GetEncryptionInfo per verificare se un documento PDF è crittografato. Questi metodi forniscono anche informazioni sull'handler di crittografia usato per crittografare il documento.

Il seguente frammento di codice C# mostra come verificare se un file PDF è crittografato:

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)");

Molti documenti PDF crittografati con password non richiedono una password per essere aperti. Per tali file PDF, una password è necessaria solo per la modalità "owner" (senza restrizioni).

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

Per un documento PDF crittografato con certificati, è possibile ottenere informazioni sui relativi destinatari. In altre parole, puoi verificare quali certificati possono sbloccare il documento PDF. Nota che le autorizzazioni del documento dipendono dal certificato effettivamente usato per decifrare il file PDF.

// la proprietà Recipients contiene informazioni sui certificati
// che possono essere usati per decifrare il documento PDF
foreach (var recipient in publicKeyInfo.Recipients)
    Console.WriteLine(recipient.SerialNumber);

Aprire documenti PDF crittografati in .NET

Un documento PDF crittografato tramite password può richiedere oppure no una password per essere aperto. In entrambi i casi, usa un costruttore PdfDocument per aprire il documento.

Se il file PDF non richiede una password, usa un costruttore senza il parametro del gestore di decrittazione. La libreria Docotic.Pdf aprirà il documento con autorizzazioni "utente" (ristrette).

Se il documento PDF richiede una password per essere aperto, usa un costruttore con un gestore di tipo PdfStandardDecryptionHandler. Usa lo stesso costruttore se vuoi aprire un file PDF protetto con autorizzazioni "owner" (senza restrizioni).

Il seguente frammento di codice mostra come aprire un file PDF protetto da password in C#:

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

I documenti PDF crittografati con certificati richiedono un certificato corrispondente per essere aperti. Per un file PDF potrebbero esserci più certificati corrispondenti. L'autore del documento PDF crittografato può concedere autorizzazioni diverse a certificati corrispondenti diversi.

Se hai installato un certificato corrispondente nell'archivio certificati X.509 dell'utente corrente, usa un costruttore PdfDocument senza il parametro del gestore di decrittazione. La libreria Docotic.Pdf userà il primo certificato corrispondente dall'archivio certificati e userà il certificato per aprire il documento.

Nei casi in cui non hai installato nell'archivio certificati X.509 dell'utente corrente un certificato corrispondente/desiderato, crea un'istanza di PdfPublicKeyDecryptionHandler e usala con un costruttore PdfDocument. Puoi creare un gestore usando un certificato, un keystore o un archivio certificati.

Il seguente frammento di codice C# crea un gestore di decrittazione a chiave pubblica con un certificato da un keystore. Quindi il gestore viene usato per aprire un file PDF protetto da certificato:

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

Rimuovere la protezione dai file PDF

Per rimuovere la protezione da un documento PDF, segui questi passaggi:

  • apri il PDF usando un costruttore PdfDocument con un gestore di decrittazione appropriato
  • non configurare alcun gestore di crittografia nelle opzioni di salvataggio
  • salva il documento PDF

Senza un gestore di crittografia, la libreria salverà il documento PDF non crittografato.

Per rimuovere le password da un PDF, apri il documento con un gestore di tipo PdfStandardDecryptionHandler. Per i documenti protetti da certificato, usa un gestore di tipo PdfPublicKeyDecryptionHandler.

Verificare le autorizzazioni PDF in .NET

Per verificare le autorizzazioni concesse per un documento PDF, devi prima creare o aprire il documento. Non importa se apri un file PDF crittografato oppure un file senza protezione.

Questo frammento di codice mostra come verificare le autorizzazioni PDF in C#:

// crea un nuovo documento o aprine uno esistente
using var document = new PdfDocument(fileName);
Console.WriteLine("Document permissions = {0}", document.GrantedPermissions);