Cette page peut contenir du texte traduit automatiquement.

Décrypter des documents PDF en C# et VB.NET

Un document PDF peut être protégé par des mots de passe, des certificats, ou ne pas être protégé.

Il existe différentes approches pour ouvrir des documents PDF. La méthode recommandée consiste à vérifier d'abord si un fichier PDF est sécurisé. L'autre option consiste à essayer d'ouvrir n'importe quel document PDF sans vérifier au préalable s'il est chiffré ou non. La bibliothèque Docotic.Pdf lève des exceptions CannotDecryptPdfException pour les documents qui nécessitent un mot de passe ou un certificat.

Décrypter un PDF, supprimer le mot de passe d'un PDF en C# et VB.NET

Vérifier si un document PDF est protégé

La bibliothèque fournit des méthodes GetEncryptionInfo pour vérifier si un document PDF est chiffré. Ces méthodes fournissent également des informations sur le gestionnaire de chiffrement utilisé pour chiffrer le document.

L'extrait de code C# suivant montre comment vérifier si un fichier PDF est chiffré :

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

De nombreux documents PDF chiffrés avec des mots de passe ne nécessitent pas de mot de passe pour les ouvrir. Pour de tels fichiers PDF, un mot de passe n'est requis que pour le mode « propriétaire » (sans restriction).

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

Pour un document PDF chiffré avec des certificats, il est possible d'obtenir des informations sur ses destinataires. En d'autres termes, vous pouvez vérifier quels certificats peuvent déverrouiller le document PDF. Veuillez noter que les autorisations du document dépendent du certificat réel utilisé pour déchiffrer le fichier PDF.

// la propriété Recipients contient des informations sur les certificats
// qui peuvent être utilisés pour déchiffrer le document PDF
foreach (var recipient in publicKeyInfo.Recipients)
    Console.WriteLine(recipient.SerialNumber);

Ouvrir des documents PDF chiffrés dans .NET

Un document PDF chiffré à l'aide de mots de passe peut nécessiter ou non un mot de passe pour l'ouvrir. Dans les deux cas, utilisez un PdfDocument constructor pour ouvrir le document.

Si le fichier PDF ne nécessite pas de mot de passe, utilisez un constructeur sans paramètre de gestionnaire de déchiffrement. La bibliothèque Docotic.Pdf ouvrira le document avec des autorisations « utilisateur » (restreintes).

Si le document PDF nécessite un mot de passe pour être ouvert, utilisez un constructeur avec un gestionnaire de type PdfStandardDecryptionHandler. Utilisez le même constructeur si vous souhaitez ouvrir un fichier PDF sécurisé avec des autorisations « propriétaire » (sans restriction).

L'extrait de code suivant montre comment ouvrir un fichier PDF protégé par mot de passe en C# :

using var document = new PdfDocument(fileName, new PdfStandardDecryptionHandler("password"));
// faire quelque chose avec le document déchiffré

Les documents PDF chiffrés à l'aide de certificats nécessitent un certificat correspondant pour être ouverts. Il peut exister plus d'un certificat correspondant pour un fichier PDF. L'auteur du document PDF chiffré peut accorder des autorisations différentes à différents certificats correspondants.

Si vous avez un certificat correspondant installé dans le magasin de certificats X.509 de l'utilisateur actuel, utilisez un constructeur PdfDocument sans paramètre de gestionnaire de déchiffrement. La bibliothèque Docotic.Pdf utilisera le premier certificat correspondant du magasin de certificats et utilisera ce certificat pour ouvrir le document.

Dans les cas où vous n'avez pas de certificat correspondant / souhaité installé dans le magasin de certificats X.509 de l'utilisateur actuel, créez une instance de PdfPublicKeyDecryptionHandler et utilisez-la avec un constructeur PdfDocument. Vous pouvez créer un gestionnaire à l'aide d'un certificat, d'un fichier de clés ou d'un magasin de certificats.

L'extrait de code C# suivant crée un gestionnaire de déchiffrement à clé publique avec un certificat provenant d'un fichier de clés. Le gestionnaire est ensuite utilisé pour ouvrir un fichier PDF protégé par certificat :

var handler = new PdfPublicKeyDecryptionHandler("key-store.p12", "password");
using var document = new PdfDocument(fileName, handler);
// faire quelque chose avec le document déchiffré

Supprimer la protection des fichiers PDF

Pour supprimer la protection d'un document PDF, suivez ces étapes :

  • ouvrez le PDF à l'aide d'un constructeur PdfDocument avec un gestionnaire de déchiffrement approprié
  • ne configurez aucun gestionnaire de chiffrement dans les save options
  • enregistrez le document PDF

Sans gestionnaire de chiffrement, la bibliothèque enregistrera le document PDF non chiffré.

Pour supprimer les mots de passe d'un PDF, ouvrez le document avec un gestionnaire de type PdfStandardDecryptionHandler. Pour les documents protégés par certificat, veuillez utiliser un gestionnaire de type PdfPublicKeyDecryptionHandler.

Vérifier les permissions PDF dans .NET

Pour vérifier les permissions accordées à un document PDF, vous devez d'abord créer ou ouvrir le document. Peu importe que vous ouvriez un fichier PDF chiffré ou un fichier sans protection.

Cet extrait de code montre comment vérifier les permissions PDF en C# :

// créer un nouveau document ou ouvrir un document existant
using var document = new PdfDocument(fileName);
Console.WriteLine("Document permissions = {0}", document.GrantedPermissions);