Cette page peut contenir du texte traduit automatiquement.
Chiffrer des documents PDF en C# et VB.NET
Avec l'aide de la bibliothèque Docotic.Pdf, vous pouvez chiffrer des documents PDF avec des mots de passe ou des certificats.
La bibliothèque chiffre les documents protégés à l'aide d'un algorithme de chiffrement de votre choix. La bibliothèque prend en charge les algorithmes de chiffrement RC4 40 bits, RC4 128 bits, AES 128 bits et AES 256 bits. Vous décidez des autorisations à accorder aux utilisateurs des fichiers PDF protégés.

Protéger un PDF avec des mots de passe
Les documents PDF protégés par mot de passe ont un mot de passe propriétaire et, éventuellement, un mot de passe utilisateur. Toutes les autorisations PDF sont accordées lorsque quelqu'un ouvre un fichier PDF protégé par mot de passe avec le mot de passe propriétaire. Si un document PDF est ouvert avec le mot de passe utilisateur ou sans mot de passe du tout, seules les autorisations de l'"utilisateur" sont accordées. Par exemple, l'auteur du fichier PDF chiffré peut interdire l'impression aux "utilisateurs", mais le "propriétaire" pourra toujours imprimer le document.
Pour produire un document PDF protégé par mot de passe, créez une instance de la classe PdfStandardEncryptionHandler et configurez-la selon les besoins. Attribuez ensuite l'objet à la propriété EncryptionHandler dans les options d'enregistrement du document. La bibliothèque utilisera le gestionnaire pour chiffrer le document PDF lors de son enregistrement.
L'extrait de code suivant montre comment créer un fichier PDF protégé par mot de passe en C# :
using var document = new PdfDocument();
var handler = new PdfStandardEncryptionHandler("owner", "user");
handler.UserPermissions.Flags = PdfPermissionFlags.ModifyContents;
var saveOptions = new PdfSaveOptions { EncryptionHandler = handler };
document.Save(outputFileName, saveOptions);
Le code ci-dessus utilise owner pour le mot de passe propriétaire et user pour le mot de passe utilisateur. Les lecteurs PDF exigeront un mot de passe pour ouvrir le fichier PDF sécurisé. Cela s'explique par le fait que le mot de passe utilisateur n'est ni null ni une chaîne vide.
Si vous souhaitez disposer d'un fichier PDF sécurisé tout en permettant à n'importe qui de l'ouvrir sans mot de passe, utilisez null ou une chaîne vide pour le mot de passe utilisateur.
Protéger un PDF avec des certificats en .NET
Tout document PDF protégé par certificat possède une collection de destinataires. La collection peut contenir un nombre quelconque d'éléments. Chaque destinataire décrit un certificat pouvant être utilisé pour déchiffrer le document PDF sécurisé. Pour chaque destinataire, des autorisations d'accès PDF sont spécifiées. Les autorisations accordées pour le document PDF déchiffré dépendent du certificat utilisé pour lever la protection du document.
Certaines autorisations d'accès permettent toutes les opérations sur le fichier PDF déchiffré. Dans la bibliothèque Docotic.Pdf, nous appelons propriétaires les destinataires disposant de telles autorisations. Les destinataires ordinaires ont des autorisations limitées pour le document PDF déchiffré.
Pour créer un document protégé par certificat, commencez par créer une instance de la classe PdfPublicKeyEncryptionHandler. Les constructeurs sans paramètre d'autorisations créent un objet avec un destinataire propriétaire. Utilisez les constructeurs avec le paramètre d'autorisations pour obtenir un gestionnaire de chiffrement avec un destinataire ordinaire.
Vous pouvez ajouter d'autres destinataires propriétaires à l'aide des méthodes AddOwner. Utilisez les méthodes AddRecipient pour ajouter des destinataires ordinaires. Vous pouvez ajouter autant de propriétaires et de destinataires ordinaires que nécessaire au gestionnaire de chiffrement.
Indiquez ensuite à la bibliothèque d'utiliser le gestionnaire lors de l'enregistrement du document. Pour cela, attribuez l'objet à la propriété EncryptionHandler dans les options d'enregistrement du document.
Le code suivant montre comment créer un fichier PDF protégé par certificat en C#. Le code prépare un gestionnaire avec un propriétaire et des destinataires ordinaires. Dans les deux cas, les certificats des destinataires sont extraits des magasins de clés fournis.
using var document = new PdfDocument();
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);
Restreindre la modification d'un fichier PDF
Lors du chiffrement d'un document PDF, il est nécessaire de configurer les autorisations pour les utilisateurs du fichier. En d'autres termes, vous devez spécifier l'autorisation PDF à accorder pour le document ouvert avec un mot de passe utilisateur ou un certificat correspondant à un destinataire ordinaire.
La bibliothèque Docotic.Pdf fournit la classe PdfPermissions pour les autorisations utilisateur. Cette classe offre deux façons de configurer les autorisations. Vous pouvez tout configurer d'un coup à l'aide de la propriété Flags. L'autre possibilité consiste à utiliser des propriétés individuelles pour chaque autorisation possible.
Lors de la création d'un objet PdfStandardEncryptionHandler, utilisez la propriété UserPermissions pour accéder aux autorisations. Avec un objet PdfPublicKeyEncryptionHandler, utilisez le constructeur PdfPermissions. Le reste de la configuration est identique.
Le code suivant montre comment configurer les autorisations PDF en C# :
// Par défaut, les objets d'autorisations autorisent tout.
// Vous pouvez utiliser la propriété Flags pour n'accorder que des autorisations spécifiques.
var permisssions1 = new PdfPermissions
{
Flags = PdfPermissionFlags.FillFormFields | PdfPermissionFlags.ModifyAnnotations
};
// Ou vous pouvez désactiver uniquement les autorisations que vous souhaitez refuser.
var permisssions2 = new PdfPermissions
{
AssembleDocument = false,
CopyContents = false,
ExtractContents = false,
ModifyContents = false,
PrintDocument = false,
PrintFaithfulCopy = false
};
// Ou vous pouvez d'abord désactiver toutes les autorisations, puis n'activer que celles
// que vous souhaitez autoriser.
var permisssions3 = new PdfPermissions
{
AllowEverything = false,
FillFormFields = true,
ModifyAnnotations = true
};
// Les objets permisssions1, permisssions2 et permisssions3 décrivent
// les mêmes autorisations à ce stade.
Chiffrer un PDF avec AES-256 dans .NET
Docotic.Pdf peut chiffrer des documents PDF avec AES-256. Cet algorithme de chiffrement est le plus robuste pris en charge par la bibliothèque. Notez que tous les lecteurs PDF ne prennent pas forcément en charge cet algorithme.
Après avoir créé un objet PdfStandardEncryptionHandler ou PdfPublicKeyEncryptionHandler, utilisez la propriété Algorithm pour configurer l'algorithme de chiffrement.
Le code C# suivant montre comment protéger un document PDF avec des mots de passe et le chiffrer à l'aide d'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);
Chiffrement et PDF/A
Il n'est pas autorisé de chiffrer des fichiers PDF/A. La bibliothèque lève une exception de type PdfException lorsque vous essayez de configurer un gestionnaire de chiffrement et d'activer l'option de génération PDF/A dans les options d'enregistrement du document.
PDF/A in a Nutshell donne des conseils pour sécuriser les fichiers PDF/A :
Les utilisateurs qui souhaitent protéger leurs fichiers PDF/A doivent protéger l'emplacement de stockage de ces fichiers. Cela peut être réalisé, par exemple, en mettant en place une protection par mot de passe pour un dossier ou un lecteur.