Maison >développement back-end >Tutoriel Python >Comment chiffrer et déchiffrer des chaînes en toute sécurité à l'aide de mots de passe en Python ?

Comment chiffrer et déchiffrer des chaînes en toute sécurité à l'aide de mots de passe en Python ?

Barbara Streisand
Barbara Streisandoriginal
2024-10-22 21:03:02264parcourir

How to Safely Encrypt and Decrypt Strings Using Passwords in Python?

Crypter et déchiffrer en toute sécurité des chaînes avec des mots de passe en Python

La bibliothèque de cryptographie de Python est une boîte à outils complète pour crypter et déchiffrer des données. Pour chiffrer des chaînes à l'aide d'un mot de passe, vous pouvez tirer parti de la classe Fernet, qui fournit un cryptage robuste et inclut des fonctionnalités essentielles telles qu'un horodatage, une signature HMAC et un encodage base64.

Fernet avec mot de passe

<code class="python">from cryptography.fernet import Fernet, FernetException

password = 'mypass'  
fernet = Fernet(password.encode())

encrypted_message = fernet.encrypt(b'John Doe')
decrypted_message = fernet.decrypt(encrypted_message)

print(encrypted_message)  # Encrypted string
print(decrypted_message.decode())  # 'John Doe'</code>

Fernet protège les données cryptées en appliquant plusieurs couches de cryptage et en garantissant l'intégrité des messages avec une signature HMAC.

Génération de clé dérivée d'un mot de passe pour Fernet

Bien que l'utilisation d'un mot de passe directement avec Fernet soit pratique , il est plus sûr de générer une clé à l'aide d'un mot de passe. Cette approche consiste à dériver une clé secrète du mot de passe et du sel à l'aide d'une fonction de dérivation de clé.

<code class="python">import secrets

from cryptography.fernet import Fernet
from cryptography.hazmat.backends import default_backend
from cryptography.hazmat.primitives import hashes
from cryptography.hazmat.primitives.kdf.pbkdf2 import PBKDF2HMAC

backend = default_backend()
salt = secrets.token_bytes(16)  # Generate a unique salt
password = 'mypass'.encode()  # Convert password to bytes

kdf = PBKDF2HMAC(
    algorithm=hashes.SHA256(), length=32, salt=salt, iterations=100000,
    backend=backend
)
key = b64e(kdf.derive(password))  # Derive the secret key

fernet = Fernet(key)
encrypted_message = fernet.encrypt(b'John Doe')</code>

Cette méthode améliore la sécurité en ajoutant une couche de protection supplémentaire au processus de cryptage avec une clé forte dérivée de votre mot de passe. et un sel unique.

Autres approches de cryptage

Au-delà de Fernet, vous pouvez envisager des alternatives en fonction de vos besoins spécifiques :

Obscurisation Base64 : Pour les bases obscurcissement, le codage base64 peut être utilisé sans cryptage. Cependant, cela n'offre aucune sécurité réelle, juste l'obscurité.

Signature HMAC : Si votre objectif est l'intégrité des données, utilisez les signatures HMAC pour vous assurer que les données n'ont pas été falsifiées.

Cryptage AES-GCM : AES-GCM utilise le cryptage par blocs Galois/Counter Mode pour fournir à la fois des garanties de cryptage et d'intégrité, similaires à Fernet mais sans ses fonctionnalités conviviales.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn