from ironpdf import *
# Instantiate Renderer
renderer = ChromePdfRenderer()
# Create a PDF from a HTML string using Python
pdf = renderer.RenderHtmlAsPdf("<h1>Hello World</h1>")
# Export to a file or Stream
pdf.SaveAs("output.pdf")
# Advanced Example with HTML Assets
# Load external html assets: Images, CSS and JavaScript.
# An optional BasePath 'C:\site\assets\' is set as the file location to load assets from
myAdvancedPdf = renderer.RenderHtmlAsPdf("<img src='icons/iron.png'>", r"C:\site\assets")
myAdvancedPdf.SaveAs("html-with-assets.pdf")
Utilisation de PyCryptodome pour le chiffrement en Python
Kannapat Udonpant
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
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.
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.
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é.
Autonome : PyCryptodome ne nécessite aucune dépendance externe, ce qui le rend facile à installer et à utiliser dans différents environnements.
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())
from Crypto.Hash import SHA256
hash_object = SHA256.new(data=b'Hello, PyCryptodome!')
print(hash_object.hexdigest())
PYTHON
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")
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
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).
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)
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
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")
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
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
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)
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.
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.
Avant de devenir ingénieur logiciel, Kannapat a obtenu un doctorat en ressources environnementales à l'université d'Hokkaido au Japon. Tout en poursuivant ses études, Kannapat est également devenu membre du Vehicle Robotics Laboratory, qui fait partie du Department of Bioproduction Engineering (département d'ingénierie de la bioproduction). En 2022, il a mis à profit ses compétences en C# pour rejoindre l'équipe d'ingénieurs d'Iron Software, où il se concentre sur IronPDF. Kannapat apprécie son travail car il apprend directement auprès du développeur qui écrit la majeure partie du code utilisé dans IronPDF. Outre l'apprentissage par les pairs, Kannapat apprécie l'aspect social du travail chez Iron Software. Lorsqu'il n'écrit pas de code ou de documentation, Kannapat peut généralement être trouvé en train de jouer sur sa PS5 ou de revoir The Last of Us.
< PRÉCÉDENT Utilisation de WhisperX en Python pour la transcription
SUIVANT > OpenTelemetry Python (Comment ça marche pour les développeurs)
Des millions d'ingénieurs dans le monde entier lui font confiance
Réservez une démo en direct gratuite
Réservez une démonstration personnelle de 30 minutes.
Pas de contrat, pas de détails de carte, pas d'engagements.
Voici ce à quoi vous pouvez vous attendre :
Une démonstration en direct de notre produit et de ses principales fonctionnalités
Obtenez des recommandations de fonctionnalités spécifiques au projet
Toutes vos questions trouvent réponse pour vous assurer de disposer de toutes les informations dont vous avez besoin. (Aucun engagement de votre part.)
CHOISIR L'HEURE
VOS INFORMATIONS
Réservez votre démo en direct gratuite
Fiable par plus de 2 millions d'ingénieurs dans le monde entier