Passer au contenu du pied de page
AIDE PYTHON

Utilisation de PyCryptodome pour le chiffrement en Python

À l'ère de la transformation numérique, l'importance de mécanismes cryptographiques robustes ne saurait être sous-estimée. La cryptographie assure la sécurité et la confidentialité des données lorsqu'elles traversent divers réseaux et systèmes. PyCryptodome est une bibliothèque Python qui se distingue dans le paysage cryptographique en offrant une pléthore de fonctionnalités pour faciliter la gestion sécurisée des données, telles que les modes de chiffrement authentifiés (GCM, CCM, EAX, SIV, OCB) et l'AES accéléré avec un support de premier ordre. Cet article explore la dernière version officielle de PyCryptodome, explorant ses fonctionnalités, cas d'utilisation, processus d'installation simplifié, et comment l'utiliser 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 package Python autonome de primitives cryptographiques bas-niveau. Il a été conçu pour être un remplacement immédiat de la vieille bibliothèque PyCrypto, en abordant bon nombre de ses limitations et en étendant ses capacités. Il fournit une large gamme d'algorithmes et de protocoles cryptographiques, ce qui en fait un outil inestimable pour les développeurs ayant besoin de mettre en œuvre des fonctionnalités de sécurité dans leurs applications.

Fonctionnalités clés

  1. Prise en charge étendue des algorithmes : PyCryptodome prend en charge un large éventail d'algorithmes cryptographiques, notamment AES, RSA, DSA et bien d'autres. Ce support étendu assure que les développeurs peuvent trouver les outils nécessaires pour divers besoins cryptographiques.
  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 efficacement des fonctionnalités de sécurité.
  3. Maintenance active : Contrairement à son prédécesseur PyCrypto, PyCryptodome bénéficie d'une maintenance active, 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 simplifie son installation et son utilisation 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, ce qui améliore son utilité dans diverses applications.

Installation

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

pip install pycryptodome
pip install pycryptodome
SHELL

Concepts et Modules Principaux

PyCryptodome est organisé en plusieurs modules, chacun répondant à différents aspects de la cryptographie. Comprendre ces modules est crucial pour tirer parti de la bibliothèque efficacement.

Hachage

Les fonctions de hachage sont fondamentales pour la cryptographie, fournissant un moyen de produire une valeur de hachage de taille fixe à partir de données arbitraires. PyCryptodome prend en charge divers algorithmes de hachage grâce au module Crypto.Hash.

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

from Crypto.Hash import SHA256

# Create a new SHA-256 hash object
hash_object = SHA256.new(data=b'Hello, PyCryptodome!')

# Output the hexadecimal digest of the hash
print(hash_object.hexdigest())
from Crypto.Hash import SHA256

# Create a new SHA-256 hash object
hash_object = SHA256.new(data=b'Hello, PyCryptodome!')

# Output the hexadecimal digest of the hash
print(hash_object.hexdigest())
PYTHON

PyCryptodome (Comment cela fonctionne pour les développeurs) : Figure 1 - Résultat du hachage

Chiffrement Symétrique

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

Exemple de chiffrement et de déchiffrement AES

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

# Generate a random AES key
key = get_random_bytes(16)  # 16 bytes for AES-128

# Create a new AES cipher in EAX mode for encryption
cipher = AES.new(key, AES.MODE_EAX)
data = b'Secret Message'

# Encrypt the data and get the nonce, ciphertext and tag
nonce = cipher.nonce
ciphertext, tag = cipher.encrypt_and_digest(data)

# Create a new AES cipher in EAX mode for decryption
cipher = AES.new(key, AES.MODE_EAX, nonce=nonce)
plaintext = cipher.decrypt(ciphertext)

# Verify the authenticity of the message
try:
    cipher.verify(tag)
    print("The message is authentic:", plaintext)
except ValueError:
    print("Key incorrect or message corrupted")
from Crypto.Cipher import AES
from Crypto.Random import get_random_bytes

# Generate a random AES key
key = get_random_bytes(16)  # 16 bytes for AES-128

# Create a new AES cipher in EAX mode for encryption
cipher = AES.new(key, AES.MODE_EAX)
data = b'Secret Message'

# Encrypt the data and get the nonce, ciphertext and tag
nonce = cipher.nonce
ciphertext, tag = cipher.encrypt_and_digest(data)

# Create a new AES cipher in EAX mode for decryption
cipher = AES.new(key, AES.MODE_EAX, nonce=nonce)
plaintext = cipher.decrypt(ciphertext)

# Verify the authenticity of the message
try:
    cipher.verify(tag)
    print("The message is authentic:", plaintext)
except ValueError:
    print("Key incorrect or message corrupted")
PYTHON

PyCryptodome (Comment cela fonctionne pour les développeurs) : Figure 2 - Résultat 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 offre un support pour RSA, DSA et ECC (Cryptographie à courbe elliptique).

Exemple de chiffrement et de déchiffrement RSA

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

# Generate an RSA key pair
key = RSA.generate(2048)
public_key = key.publickey()

# Encrypt the message using the public key
cipher = PKCS1_OAEP.new(public_key)
ciphertext = cipher.encrypt(b'Secret Message')

# Decrypt the message using the private key
cipher = PKCS1_OAEP.new(key)
plaintext = cipher.decrypt(ciphertext)
print(plaintext)
from Crypto.PublicKey import RSA
from Crypto.Cipher import PKCS1_OAEP

# Generate an RSA key pair
key = RSA.generate(2048)
public_key = key.publickey()

# Encrypt the message using the public key
cipher = PKCS1_OAEP.new(public_key)
ciphertext = cipher.encrypt(b'Secret Message')

# Decrypt the message using the private key
cipher = PKCS1_OAEP.new(key)
plaintext = cipher.decrypt(ciphertext)
print(plaintext)
PYTHON

PyCryptodome (Comment cela fonctionne pour les développeurs) : Figure 3 - Résultat RSA

Dérivation de Clés

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

Exemple d'utilisation de PBKDF2

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

# Define a password and generate a salt
password = b'my secret password'
salt = get_random_bytes(16)

# Derive a key from the password and salt using PBKDF2
key = PBKDF2(password, salt, dkLen=32, count=1000000)
print(key)
from Crypto.Protocol.KDF import PBKDF2
from Crypto.Random import get_random_bytes

# Define a password and generate a salt
password = b'my secret password'
salt = get_random_bytes(16)

# Derive a key from the password and salt using PBKDF2
key = PBKDF2(password, salt, dkLen=32, count=1000000)
print(key)
PYTHON

PyCryptodome (Comment cela fonctionne pour les développeurs) : Figure 4 - Résultat 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é 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é forts comme 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'])

# Verify the authenticity of the password
try:
    cipher.verify(password_data['tag'])
    print("The stored password is authentic:", plaintext)
except ValueError:
    print("Key incorrect or password corrupted")
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'])

# Verify the authenticity of the password
try:
    cipher.verify(password_data['tag'])
    print("The stored password is authentic:", plaintext)
except ValueError:
    print("Key incorrect or password corrupted")
PYTHON

PyCryptodome (Comment cela fonctionne pour les développeurs) : Figure 5 - Sécurisation du mot de passe

IronPDF for Python

IronPDF est une puissante bibliothèque de génération de PDF for Python qui permet aux développeurs de créer, éditer, et manipuler des documents PDF aisément. Elle offre une large gamme de fonctionnalités, allant de la conversion de HTML en PDF à la fusion de plusieurs PDFs, ce qui en fait un choix idéal pour automatiser les flux de travail documentaires. Lorsqu'elle est combinée avec PyCryptodome, une bibliothèque robuste pour les opérations cryptographiques, les développeurs peuvent ajouter des fonctionnalités sécurisées à leurs documents PDF, telles que le chiffrement et les signatures numériques. Cette intégration est particulièrement utile pour les applications nécessitant de hauts niveaux 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 Package Manager Python. Voici comment commencer :

pip install ironpdf
pip install ironpdf
SHELL

PyCryptodome (Comment cela fonctionne pour les développeurs) : Figure 6 - IronPDF

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

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

# Create a new PDF renderer
renderer = ChromePdfRenderer()

# Render a URL as a PDF and save it
pdfFromUrl = renderer.RenderUrlAsPdf("https://ironpdf.com/")
pdfFromUrl.SaveAs("output.pdf")

# Function to encrypt a file using AES
def encrypt_file(file_name, key):
    cipher = AES.new(key, AES.MODE_CBC)  # Use AES in CBC mode
    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)
from ironpdf import ChromePdfRenderer
from Crypto.Cipher import AES
from Crypto.Util.Padding import pad
import os

# Create a new PDF renderer
renderer = ChromePdfRenderer()

# Render a URL as a PDF and save it
pdfFromUrl = renderer.RenderUrlAsPdf("https://ironpdf.com/")
pdfFromUrl.SaveAs("output.pdf")

# Function to encrypt a file using AES
def encrypt_file(file_name, key):
    cipher = AES.new(key, AES.MODE_CBC)  # Use AES in CBC mode
    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 montre la création d'un PDF simple en using IronPDF puis le chiffre en utilisant AES de PyCryptodome, fournissant une base pour construire des applications de gestion de PDF plus complexes et sécurisées.

PyCryptodome (Comment cela fonctionne pour les développeurs) : Figure 7 - Résultat du fichier chiffré

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. Avec son ensemble complet de fonctionnalités, y compris le support des modes de chiffrement authentifiés, le chiffrement symétrique et asymétrique, le hachage, et 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 son caractère autonome en font un outil indispensable pour mettre en œuvre la gestion sécurisée des données dans divers scénarios, de la gestion des mots de passe à la génération et au chiffrement sécurisés de documents, garantissant l'intégrité et la confidentialité des données dans un monde de plus en plus numérique.

Pour des détails sur la licence IronPDF, consultez la page de licence d'IronPDF. Pour aller plus loin, consultez notre tutoriel approfondi sur la conversion de HTML en PDF.

Curtis Chau
Rédacteur technique

Curtis Chau détient un baccalauréat en informatique (Université de Carleton) et se spécialise dans le développement front-end avec expertise en Node.js, TypeScript, JavaScript et React. Passionné par la création d'interfaces utilisateur intuitives et esthétiquement plaisantes, Curtis aime travailler avec des frameworks modernes ...

Lire la suite

Iron Support Team

We're online 24 hours, 5 days a week.
Chat
Email
Call Me