L’accès non autorisé aux fichiers sensibles est un problème courant de nos jours. Pour vous assurer que seules les personnes que vous autorisez peuvent accéder au contenu de vos fichiers, vous pouvez les chiffrer avant de les transmettre.
Apprenez à crypter un fichier PDF à l’aide de Python, et à le décrypter pour retrouver son état d’origine.
Configuration de l’environnement
Pour suivre, vous devez être familier avec les bases de Python.
Dans un terminal Mac ou une interface de ligne de commande Windows, exécutez la commande suivante pour installer la bibliothèque PyMuPDF :
pip install PyMuPDF
Cette bibliothèque vous aidera à ouvrir et à manipuler les fichiers PDF.
Lorsque vous avez terminé l’installation de PyMuPDF, vous êtes prêt à commencer à coder.
Le code source complet est disponible dans un dépôt GitHub.
Importez le module Fitz
Importez le module fitz de la bibliothèque PyMuPDF. Cela vous permettra d’appeler et d’utiliser les fonctions qu’il supporte.
import fitz
Vous utiliserez fitz pour ouvrir, crypter, décrypter et sauvegarder les PDFs.
Vérifier si le PDF est crypté
Créez une fonction qui vérifiera si le PDF est déjà crypté en retournant une valeur booléenne.
def pdf_is_encrypted(file):
pdf = fitz.Document(file)
return pdf.isEncrypted
Vous utiliserez cette fonction plus tard pour aider le programme à décider automatiquement s’il faut crypter ou décrypter le PDF d’entrée.
Cryptage du PDF
Créez une fonction pour crypter le PDF d’entrée. La fonction vérifiera si le PDF est déjà crypté. S’il n’est pas crypté, elle le cryptera en utilisant l’algorithme AES-256. C’est l’algorithme de cryptage le plus fort que fitz offre. Enfin, le PDF crypté est sauvegardé.
def encrypt_pdf_file(pdf, password, outfile, file):
if not pdf_is_encrypted(file):
perm = int(
# Ensure everyone with the PDF
# can access it
fitz.PDF_PERM_ACCESSIBILITY
| fitz.PDF_PERM_PRINT # permits printing
| fitz.PDF_PERM_COPY # permits copying
| fitz.PDF_PERM_ANNOTATE # permits annotations
)
# eEncryption algorithm
encrypt_meth = fitz.PDF_ENCRYPT_AES_256
pdf.save(outfile, encryption=encrypt_meth, user_pw=password,
permissions=perm)
if pdf.save:
print("PDF encrypted")
Cette fonction enregistre le PDF crypté dans le chemin de fichier que vous passez dans l’argument outfile.
Décryptage du PDF crypté
Créez une fonction de décryptage. Cette fonction vérifiera d’abord si le fichier d’entrée est crypté. S’il est crypté, elle demandera à l’utilisateur d’entrer le mot de passe. Elle essaiera ensuite d’ouvrir le PDF en utilisant le mot de passe fourni. Si le mot de passe est correct, fitz va décrypter le PDF. Il enregistre ensuite le contenu du PDF décrypté dans un autre fichier PDF non protégé.
def decrypt_pdf(file):
if pdf_is_encrypted(file):
password = input('Enter pdf password : ')
pdf = fitz.open(file)
if pdf.authenticate(password):
pdf.save('decrypted.pdf')
if pdf.save:
print("PDF decrypted")
else:
print('Incorrect Password')
Ce code enregistre le PDF non protégé dans votre répertoire de travail actuel.
Le a décrypté le protégé.pdf et l’a enregistré sous le nom de décrypté.pdf.
Contrôler le flux du programme
Créez une fonction principale qui contrôlera le flux de votre programme. Elle stockera le chemin du PDF d’entrée, appellera les fonctions d’encryptage et de décryptage, et passera les paramètres d’entrée.
def main():
# replace the file path with either that of
# the pdf to be encrypted or decrypted
file = 'sample.pdf'
pdf = fitz.open(file)
password = 'pass123'
encrypt_pdf_file(pdf, password, 'protected.pdf', file)
decrypt_pdf(pdf)
Pour changer le nom du fichier PDF crypté, remplacez « protected.pdf » par votre propre nom, en veillant à conserver l’extension « .pdf ».
Exécution de la méthode principale
Assurez-vous que la méthode principale s’exécute en premier :
if __name__ == '__main__':
main()
Ce code vérifie si le script est exécuté en tant que programme principal et non en tant que module importé. S’il s’agit du programme principal, il appelle la fonction principale.
Améliorez vos compétences en Python
La création d’un programme de cryptage/décryptage de PDF en Python est un projet amusant mais difficile. Il vous permet de mettre en pratique vos compétences en Python et de maîtriser la manipulation des fichiers avec ce langage.
Pour améliorer vos compétences, vous devriez travailler sur plus de projets Python. Cela vous aidera à interagir avec davantage de bibliothèques et de modules Python. Python est très diversifié et vous pouvez l’appliquer dans de nombreux domaines pour effectuer différentes tâches.
