AIDE PYTHON

Utilisation de PyCryptodome pour le chiffrement en Python

Publié juillet 1, 2024
Partager:

À l'ère de la transformation numérique, on ne saurait trop insister sur l'importance de mécanismes cryptographiques robustes. La cryptographie garantit la sécurité et la confidentialité des données lorsqu'elles transitent par différents réseaux et systèmes. PyCryptodome est une bibliothèque Python qui se démarque dans le paysage cryptographique, en offrant une pléthore de fonctionnalités pour faciliter la manipulation sécurisée des données, comme les modes de chiffrement authentifiés(GCM, CCM, EAX, SIV, OCB) et AES accéléré avec un support de premier ordre. Cet article se penche sur la dernière version officielle de PyCryptodome, en explorant ses fonctionnalités, ses cas d'utilisation, son processus d'installation simplifié et la façon dont il peut être utilisé efficacement dans diverses applications. Nous créerons également des fichiers PDF cryptés à l'aide d'une bibliothèque C# distincte, IronPDF, avec PyCryptodome.

Aperçu de PyCryptodome

PyCryptodome est un paquetage Python autonome de primitives cryptographiques de bas niveau. Elle a été conçue pour remplacer directement l'ancienne bibliothèque PyCrypto, en corrigeant un grand nombre de ses limitations et en étendant ses capacités. Il fournit un large éventail d'algorithmes et de protocoles cryptographiques, ce qui en fait un outil précieux pour les développeurs qui doivent mettre en œuvre des fonctions de sécurité dans leurs applications.

Caractéristiques principales

  1. Prise en charge d'un grand nombre d'algorithmes : PyCryptodome prend en charge un large éventail d'algorithmes cryptographiques, notamment AES, RSA, DSA, et bien d'autres. Cette prise en charge étendue permet aux développeurs de trouver les outils nécessaires pour répondre à leurs différents besoins en matière de cryptographie.

  2. Facilité d'utilisation : La bibliothèque est conçue pour être conviviale, avec une API claire et concise qui permet même à ceux qui ont des connaissances limitées en cryptographie de mettre en œuvre des fonctions de sécurité de manière efficace.

  3. Maintenance active : Contrairement à son prédécesseur PyCrypto, PyCryptodome est activement maintenu, avec des mises à jour et des améliorations régulières, garantissant la compatibilité avec les dernières versions de Python et les normes de sécurité.

  4. Autonome : PyCryptodome ne nécessite aucune dépendance externe, ce qui le rend facile à installer et à utiliser dans différents environnements.

  5. Intégration avec les bibliothèques existantes : PyCryptodome peut s'intégrer de manière transparente avec d'autres bibliothèques et frameworks Python, améliorant ainsi son utilité dans diverses applications.

Installation

L'installation de PyCryptodome est un processus simple, grâce à sa nature autonome. Il peut être installé via pip, l'installateur de paquets de Python, en utilisant la commande suivante :

pip install pycryptodome

Concepts et modules de base

PyCryptodome est organisé en plusieurs modules, chacun traitant de différents aspects de la cryptographie. Il est essentiel de comprendre ces modules pour exploiter efficacement la bibliothèque.

Hachage

Les fonctions de hachage sont fondamentales pour la cryptographie, car elles permettent de produire une valeur de hachage de taille fixe à partir de données arbitraires. PyCryptodome supporte différents algorithmes de hachage grâce au module Crypto.Hash.

Exemple d'utilisation de la fonction de hachage SHA-256

from Crypto.Hash import SHA256
hash_object = SHA256.new(data=b'Hello, PyCryptodome!')
print(hash_object.hexdigest())
PYTHON

PyCryptodome(Comment ça marche pour les développeurs) : Figure 1 - Sortie du hachage

Chiffrement symétrique

Le cryptage symétrique implique la même clé pour le cryptage et le décryptage. Le module Crypto.Cipher de PyCryptodome supporte plusieurs algorithmes de chiffrement symétriques, y compris AES, DES, et plus encore.

Exemple de cryptage et de décryptage AES

from Crypto.Cipher import AES
from Crypto.Random import get_random_bytes

key = get_random_bytes(16)  # 16 bytes for AES-128
cipher = AES.new(key, AES.MODE_EAX)
data = b'Secret Message'
nonce = cipher.nonce
ciphertext, tag = cipher.encrypt_and_digest(data)

# Decryption
cipher = AES.new(key, AES.MODE_EAX, nonce=nonce)
plaintext = cipher.decrypt(ciphertext)
try:
    cipher.verify(tag)
    print("The message is authentic:", plaintext)
except ValueError:
    print("Key incorrect or message corrupted")
PYTHON

PyCryptodome(Comment ça marche pour les développeurs) : Figure 2 - Sortie AES

Chiffrement asymétrique

Le chiffrement asymétrique utilise une paire de clés : une clé publique pour le chiffrement et une clé privée pour le déchiffrement. Le module Crypto.PublicKey de PyCryptodome supporte RSA, DSA, et ECC(Cryptographie à courbe elliptique).

Exemple de cryptage et de décryptage RSA

from Crypto.PublicKey import RSA
from Crypto.Cipher import PKCS1_OAEP

key = RSA.generate(2048)
public_key = key.publickey()
cipher = PKCS1_OAEP.new(public_key)
ciphertext = cipher.encrypt(b'Secret Message')

# Decryption
cipher = PKCS1_OAEP.new(key)
plaintext = cipher.decrypt(ciphertext)
print(plaintext)
PYTHON

PyCryptodome(Comment ça marche pour les développeurs) : Figure 3 - Sortie RSA

Dérivation des clés

Les fonctions de dérivation de clés génèrent des clés cryptographiques à partir d'un mot de passe ou d'une phrase de passe. Cette fonction est particulièrement utile dans le cas d'un cryptage basé sur un mot de passe. PyCryptodome supporte PBKDF2, scrypt et d'autres algorithmes de dérivation de clés.

Exemple d'utilisation de PBKDF2

from Crypto.Protocol.KDF import PBKDF2
from Crypto.Random import get_random_bytes

password = b'my secret password'
salt = get_random_bytes(16)
key = PBKDF2(password, salt, dkLen=32, count=1000000)
print(key)
PYTHON

PyCryptodome(Comment ça marche pour les développeurs) : Figure 4 - Sortie PBKDF2

Cas d'utilisation

Gestion des mots de passe

Les gestionnaires de mots de passe bénéficient des fonctions de dérivation de clés de PyCryptodome pour stocker et récupérer en toute sécurité les mots de passe des utilisateurs. En utilisant des algorithmes de dérivation de clés solides tels que PBKDF2, les développeurs peuvent s'assurer que les mots de passe stockés sont résistants aux attaques par force brute.

Exemple de sécurisation des mots de passe

from Crypto.Protocol.KDF import PBKDF2
from Crypto.Random import get_random_bytes
from Crypto.Cipher import AES

# Derive a strong key from a password
password = b'user_password'
salt = get_random_bytes(16)
key = PBKDF2(password, salt, dkLen=32, count=1000000)

# Encrypt the password before storing
cipher = AES.new(key, AES.MODE_EAX)
stored_password = b'ActualPassword'
nonce = cipher.nonce
ciphertext, tag = cipher.encrypt_and_digest(stored_password)

# Store ciphertext, nonce, salt, and tag securely
password_data = {
    'ciphertext': ciphertext,
    'nonce': nonce,
    'salt': salt,
    'tag': tag
}

# Decrypt the password when needed
key = PBKDF2(password, password_data['salt'], dkLen=32, count=1000000)
cipher = AES.new(key, AES.MODE_EAX, nonce=password_data['nonce'])
plaintext = cipher.decrypt(password_data['ciphertext'])
try:
    cipher.verify(password_data['tag'])
    print("The stored password is authentic:", plaintext)
except ValueError:
    print("Key incorrect or password corrupted")
PYTHON

PyCryptodome(Comment ça marche pour les développeurs) : Figure 5 - Sécurisation de la sortie du mot de passe

IronPDF for Python

IronPDF est une puissante bibliothèque de génération de PDF pour Python qui permet aux développeurs de créer, d'éditer et de manipuler des documents PDF sans effort. Il offre un large éventail de fonctionnalités, de la conversion de HTML en PDF à la fusion de plusieurs PDF, ce qui en fait un choix idéal pour l'automatisation des flux de documents. Combiné à PyCryptodome, une bibliothèque robuste pour les opérations cryptographiques, les développeurs peuvent ajouter des fonctions sécurisées à leurs documents PDF, telles que le cryptage et les signatures numériques. Cette intégration est particulièrement utile pour les applications exigeant des niveaux élevés de sécurité et d'intégrité des données, comme dans les environnements financiers, juridiques ou confidentiels.

Pour installer IronPDF, vous pouvez utiliser pip, le gestionnaire de paquets Python. Voici comment commencer :

pip install ironpdf

PyCryptodome(Comment ça marche pour les développeurs) : Figure 6 - IronPDF

Après l'installation, vous pouvez commencer à utiliser IronPDF pour créer et manipuler des PDF. Voici un exemple simple qui montre comment créer un PDF avec IronPDF puis utiliser PyCryptodome pour le chiffrer :

from ironpdf import *     
from Crypto.Cipher import AES
from Crypto.Util.Padding import pad
import os

renderer = ChromePdfRenderer()
pdfFromUrl = renderer.RenderUrlAsPdf("https://ironpdf.com/")
pdfFromUrl.SaveAs("output.pdf")

# Encrypt the PDF with AES
def encrypt_file(file_name, key):
    cipher = AES.new(key, AES.MODE_CBC)
    iv = cipher.iv
    with open(file_name, 'rb') as f:
        data = f.read()
    encrypted_data = iv + cipher.encrypt(pad(data, AES.block_size))
    with open(file_name + '.enc', 'wb') as f:
        f.write(encrypted_data)

# Example usage
key = os.urandom(16)  # AES key must be either 16, 24, or 32 bytes long
encrypt_file("output.pdf", key)
PYTHON

Ce script présente la création d'un PDF simple à l'aide d'IronPDF, puis le chiffre à l'aide d'AES de PyCryptodome, fournissant ainsi une base pour la construction d'applications plus complexes et sécurisées de manipulation de PDF.

PyCryptodome(Comment ça marche pour les développeurs) : Figure 7 - Sortie d'un fichier crypté

Conclusion

En conclusion, PyCryptodome est une bibliothèque Python puissante et polyvalente qui améliore considérablement les opérations cryptographiques pour les développeurs, offrant un large éventail d'algorithmes et une intégration facile avec d'autres outils comme IronPDF. Grâce à son ensemble complet de fonctionnalités, notamment la prise en charge des modes de chiffrement authentifiés, du chiffrement symétrique et asymétrique, du hachage et de la dérivation de clés, PyCryptodome répond aux besoins des applications modernes nécessitant des mesures de sécurité robustes. Sa facilité d'utilisation, sa maintenance active et sa nature autonome en font un outil indispensable pour mettre en œuvre un traitement sécurisé des données dans divers scénarios, de la gestion des mots de passe à la génération et au cryptage de documents sécurisés, en garantissant l'intégrité et la confidentialité des données dans un monde de plus en plus numérique.

Pour plus de détails sur la licence IronPDF, voir la page de licence IronPDF. Pour en savoir plus, consultez notre tutoriel complet sur la conversion de HTML en PDF.

< PRÉCÉDENT
Utilisation de WhisperX en Python pour la transcription
SUIVANT >
OpenTelemetry Python (Comment ça marche pour les développeurs)

Prêt à commencer ? Version : 2024.12 vient de paraître

Installation gratuite de pip Voir les licences > ;