Questa pagina può contenere testo tradotto automaticamente.

Crittografa documenti PDF in C# e VB.NET

Con l'aiuto della libreria Docotic.Pdf, puoi crittografare documenti PDF con password o certificati.

La libreria crittografa i documenti protetti utilizzando un algoritmo di crittografia di tua scelta. La libreria supporta gli algoritmi di crittografia RC4 a 40 bit, RC4 a 128 bit, AES a 128 bit e AES a 256 bit. Sei tu a decidere quali autorizzazioni vuoi concedere agli utenti di file PDF protetti.

Crittografa documenti PDF in C# e VB.NET

Proteggi PDF con password

I documenti PDF protetti da password hanno un proprietario e, facoltativamente, password utente. Tutte le autorizzazioni PDF vengono concesse quando qualcuno apre un file PDF protetto da password con la password del proprietario. Se un documento PDF viene aperto con la password dell'utente o senza password, vengono concesse solo le autorizzazioni "utente". Ad esempio, l'autore del file PDF crittografato può impedire la stampa agli "utenti" ma il "proprietario" potrà comunque stampare il documento.

Per produrre un documento PDF protetto da password, crea un'istanza della classe PdfStandardEncryptionHandler e configurala secondo necessità. Assegna quindi l'oggetto alla proprietà EncryptionHandler nelle opzioni di salvataggio del documento. La libreria utilizzerà il gestore per crittografare il documento PDF durante il salvataggio.

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 mostra come creare un file PDF protetto da password in C#:

using (PdfDocument document = ...)
{
    var handler = new PdfStandardEncryptionHandler("owner", "user");
    handler.UserPermissions.Flags = PdfPermissionFlags.ModifyContents;

    var saveOptions = new PdfSaveOptions { EncryptionHandler = handler };
    document.Save(outputFileName, saveOptions);
}

Il codice precedente utilizza owner per la password del proprietario e user per la password dell'utente. I visualizzatori PDF richiederanno una password per aprire il file PDF protetto. Questo perché la password dell'utente non è null o una stringa vuota.

Se desideri avere un file PDF protetto ma desideri consentire a chiunque di aprirlo senza password, utilizza null o una stringa vuota per la password dell'utente.

Proteggi PDF con certificati in .NET

Qualsiasi documento PDF protetto da certificato ha una raccolta di destinatari. La raccolta può contenere un numero qualsiasi di elementi. Ciascun destinatario descrive un certificato che può essere utilizzato per decrittografare il documento PDF protetto. Per ciascun destinatario sono specificate le autorizzazioni di accesso al PDF. Le autorizzazioni concesse per il documento PDF decrittografato dipendono dal certificato utilizzato per rimuovere la protezione del documento.

Alcune autorizzazioni di accesso consentono tutte le operazioni con il file PDF decrittografato. I destinatari con tali autorizzazioni li chiamiamo proprietari nella libreria Docotic.Pdf. I destinatari regolari hanno autorizzazioni limitate per il documento PDF decrittografato.

Per creare un documento protetto da certificato, inizia creando un'istanza della classe PdfPublicKeyEncryptionHandler. I costruttori senza un parametro di autorizzazione creano un oggetto con un destinatario proprietario. Utilizza i costruttori con il parametro autorizzazioni per ottenere un gestore di crittografia con un destinatario normale.

Puoi aggiungere più destinatari proprietari utilizzando i metodi AddOwner. Utilizza i metodi AddRecipient per aggiungere destinatari regolari. È possibile aggiungere tutti i proprietari e destinatari regolari al gestore di crittografia, secondo necessità.

Quindi indicare alla libreria di utilizzare il gestore durante il salvataggio del documento. A tale scopo, assegnare l'oggetto alla proprietà EncryptionHandler nelle opzioni di salvataggio del documento.

Il codice seguente mostra come creare un file PDF protetto da certificato in C#. Il codice prepara un gestore con un proprietario e destinatari regolari. In entrambi i casi, i certificati per i destinatari vengono prelevati dagli archivi chiavi forniti.

using (PdfDocument document = ...)
{
    var handler = new PdfPublicKeyEncryptionHandler("owner-key-store.p12", "password");
    
    var permissions = new PdfPermissions();
    permissions.Flags = PdfPermissionFlags.FillFormFields | PdfPermissionFlags.PrintDocument;
    handler.AddRecipient("recipient-key-store.p12", "password", permissions);
    
    var saveOptions = new PdfSaveOptions { EncryptionHandler = handler };
    document.Save(outputFileName, saveOptions);
}

Limita la modifica di un file PDF

Quando si crittografa un documento PDF, è necessario impostare le autorizzazioni per gli utenti del file. In altre parole, è necessario specificare l'autorizzazione PDF da concedere per il documento aperto con una password utente o un certificato corrispondente a un destinatario normale.

La libreria Docotic.Pdf fornisce la classe PdfPermissions per le autorizzazioni utente. Questa classe fornisce due modi per impostare le autorizzazioni. Puoi impostare tutte le autorizzazioni contemporaneamente utilizzando la proprietà Flags. L'alternativa è utilizzare le singole proprietà per ogni possibile autorizzazione.

Quando crei un oggetto PdfStandardEncryptionHandler, utilizza la proprietà UserPermissions per accedere alle autorizzazioni. Con un oggetto PdfPublicKeyEncryptionHandler, utilizza il costruttore PdfPermissions. Il resto della configurazione è lo stesso.

Il codice seguente mostra come impostare le autorizzazioni PDF in C#:

// Per impostazione predefinita, gli oggetti con autorizzazioni consentono tutto.

// È possibile utilizzare la proprietà Flags per concedere solo autorizzazioni specifiche.
var permisssions1 = new PdfPermissions();
permisssions1.Flags = PdfPermissionFlags.FillFormFields | PdfPermissionFlags.ModifyAnnotations;

// Oppure puoi disabilitare solo le autorizzazioni che desideri negare.
var permisssions2 = new PdfPermissions();
permisssions2.AssembleDocument = false;
permisssions2.CopyContents = false;
permisssions2.ExtractContents = false;
permisssions2.ModifyContents = false;
permisssions2.PrintDocument = false;
permisssions2.PrintFaithfulCopy = false;

// Oppure puoi prima disabilitare tutte le autorizzazioni 
// e poi abilitare solo quelle che desideri consentire.
var permisssions3 = new PdfPermissions();
permisssions3.AllowEverything = false;
permisssions3.FillFormFields = true;
permisssions3.ModifyAnnotations = true;

// Gli oggetti permissions1, permissions2 e permissions3 descrivono
// le stesse autorizzazioni a questo punto.

Crittografa PDF utilizzando AES-256 in .NET

Docotic.Pdf può crittografare documenti PDF con AES-256. Questo algoritmo di crittografia è il più potente supportato dalla libreria. Tieni presente che non tutti i lettori PDF potrebbero supportare l'algoritmo.

Dopo aver creato un oggetto PdfStandardEncryptionHandler o PdfPublicKeyEncryptionHandler, utilizza la proprietà Algorithm per impostare l'algoritmo di crittografia.

Il seguente codice C# mostra come proteggere un documento PDF con password e crittografarlo utilizzando AES-256:

using (var pdf = new PdfDocument())
{
    // ....

    var handler = new PdfStandardEncryptionHandler("owner", "user");
    handler.Algorithm = PdfEncryptionAlgorithm.Aes256Bit;

    var saveOptions = new PdfSaveOptions { EncryptionHandler = handler };
    pdf.Save("encrypted", saveOptions);
}

Crittografia e PDF/A

Non è consentito crittografare file PDF/A. La libreria genera un'eccezione di tipo PdfException quando si tenta di impostare un gestore di crittografia e di attivare l'opzione per produrre PDF/A nelle opzioni di salvataggio di un documento.

PDF/A in a Nutshell contiene consigli su come proteggere i file PDF/A:

Gli utenti che desiderano proteggere i propri file PDF/A devono proteggere la posizione di archiviazione di questi file. Ciò può essere ottenuto, ad esempio, implementando la protezione tramite password per una cartella o un'unità.