Questa pagina può contenere testo tradotto automaticamente.

Decrittografa documenti PDF in C# e VB.NET

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

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

Decrittografa PDF, rimuovi la password dal PDF in C# e VB.NET

Controlla se un documento PDF è protetto

La libreria fornisce metodi GetEncryptionInfo per verificare se un documento PDF è crittografato. Questi metodi forniscono inoltre informazioni sul gestore di crittografia utilizzato per crittografare il documento.

Libreria Docotic.Pdf 9.3.17014-dev Test di regressione Ne sono passati 14,645 Download totali di NuGet 4,172,488

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

var info = PdfDocument.GetEncryptionInfo(fileName);
if (info == null)
    Console.WriteLine("Non è crittografato");
else if (info is PdfStandardEncryptionInfo standardInfo)
    Console.WriteLine("È crittografato con una password");
else if (info is PdfPublicKeyEncryptionInfo publicKeyInfo)
    Console.WriteLine("È crittografato con uno o più certificati digitali");

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

if (standardInfo.RequiresPasswordToOpen)
    Console.WriteLine("Non può essere aperto senza una password");
else
    Console.WriteLine("Non richiede una password");

Per un documento PDF crittografato con certificati, è possibile ottenere informazioni sui suoi destinatari. In altre parole, puoi verificare quali certificati possono sbloccare il documento PDF. Tieni presente che le autorizzazioni del documento dipendono dal certificato effettivo utilizzato per decrittografare il file PDF.

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

Apri documenti PDF crittografati in .NET

Un documento PDF crittografato utilizzando password può o meno richiedere una password per aprirlo. In entrambi i casi, utilizzare un costruttore PdfDocument per aprire il documento.

Se il file PDF non richiede una password, utilizzare un costruttore senza parametro del gestore di decrittografia. La libreria Docotic.Pdf aprirà il documento con i permessi "utente" (limitati).

Se il documento PDF richiede una password per aprirlo, utilizzare un costruttore con un gestore di tipo PdfStandardDecryptionHandler. Utilizza lo stesso costruttore se desideri aprire un file PDF protetto con autorizzazioni "proprietario" (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")))
{
    // fare qualcosa con il documento decrittografato
}

I documenti PDF crittografati utilizzando i certificati richiedono un certificato corrispondente per aprirli. Potrebbero esserci più certificati corrispondenti per un file PDF. L'autore del documento PDF crittografato può concedere autorizzazioni diverse per diversi certificati corrispondenti.

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

Nei casi in cui non hai un certificato corrispondente/desiderato installato nell'archivio certificati X.509 dell'utente corrente, crea un'istanza PdfPublicKeyDecryptionHandler e utilizzala con un costruttore PdfDocument. È possibile creare un gestore utilizzando un certificato, un archivio chiavi o un archivio certificati.

Il frammento di codice C# seguente crea un gestore di decrittografia a chiave pubblica con un certificato da un archivio chiavi. Quindi il gestore viene utilizzato per aprire un file PDF protetto da certificato:

var handler = new PdfPublicKeyDecryptionHandler("key-store.p12", "password");
using (var document = new PdfDocument(fileName, handler))
{
    // fare qualcosa con il documento decrittografato
}

Rimuovi la protezione dai file PDF

Per rimuovere la protezione da un documento PDF, attenersi alla seguente procedura:

  • aprire il PDF utilizzando un costruttore PdfDocument con un gestore di decrittazione adeguato
  • non impostare alcun gestore di crittografia nelle opzioni di salvataggio
  • salvare il documento PDF

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

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

Controlla 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 o un file senza protezione.

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

// creare un nuovo documento o aprirne uno esistente
using (PdfDocument document = ...)
{
    Console.WriteLine("Document permissions = {0}", document.GrantedPermissions);
}