Cette page peut contenir du texte traduit automatiquement.

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

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

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'alternative est d'essayer d'ouvrir n'importe quel document PDF sans vérifier au préalable s'il est crypté 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 le PDF, supprimer le mot de passe du 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 crypté. 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 crypté :

var info = PdfDocument.GetEncryptionInfo(fileName);
if (info == null)
    Console.WriteLine("N'est pas crypté");
else if (info is PdfStandardEncryptionInfo standardInfo)
    Console.WriteLine("Est crypté avec un mot de passe");
else if (info is PdfPublicKeyEncryptionInfo publicKeyInfo)
    Console.WriteLine("Est crypté avec un ou plusieurs certificats numériques");

De nombreux documents PDF crypté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("Ne peut pas être ouvert sans mot de passe");
else
    Console.WriteLine("Ne nécessite pas de mot de passe");

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écrypter le fichier PDF.

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

Ouvrir des documents PDF cryptés dans .NET

Un document PDF crypté à l'aide de mots de passe peut nécessiter ou non un mot de passe pour l'ouvrir. Dans les deux cas, utilisez un constructeur PdfDocument 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écryptage. La bibliothèque Docotic.Pdf ouvrira le document avec des autorisations «utilisateur» (restreintes).

Si le document PDF nécessite un mot de passe pour l'ouvrir, 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 de «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écrypté
}

Les documents PDF chiffrés à l'aide de certificats nécessitent un certificat correspondant pour pouvoir être ouverts. Il peut y avoir plusieurs certificats correspondants pour un fichier PDF. L'auteur du document PDF crypté peut accorder différentes autorisations pour différents certificats correspondants.

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

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

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

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

Supprimer la protection des fichiers PDF

Pour supprimer la protection d'un document PDF, procédez comme suit :

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

Sans gestionnaire de cryptage, la bibliothèque enregistrera le document PDF non crypté.

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 autorisations PDF dans .NET

Pour vérifier les autorisations accordées pour un document PDF, vous devez d'abord créer ou ouvrir le document. Peu importe si vous ouvrez un fichier PDF crypté ou un fichier sans protection.

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

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