Maison > développement back-end > Tutoriel Python > Cryptage symétrique des données avec Python

Cryptage symétrique des données avec Python

Susan Sarandon
Libérer: 2025-01-04 10:58:35
original
503 Les gens l'ont consulté

Symmetric data encryption with Python

Bienvenue dans le prochain pikoTutorial !

L'un des moyens les plus simples d'effectuer un cryptage symétrique en Python consiste à utiliser l'algorithme Fernet du module de cryptographie. Installons-le avec la commande :

pip install cryptography
Copier après la connexion

Ayant disponible le module de cryptographie, écrivons notre premier script de chiffrement :

# import Fernet
from cryptography.fernet import Fernet
# Generate a key
key = Fernet.generate_key()
# Create a Fernet instance providing the generated key
fernet = Fernet(key)
# Encrypt the data
data = b'Some secret data'
encrypted_data = fernet.encrypt(data)
# Decrypt the data
decrypted_data = fernet.decrypt(encrypted_data)
print(f"Decrypted text: {decrypted_data.decode()}")
Copier après la connexion

Remarque pour les débutants : la clé est nécessaire à la fois lors du cryptage et du déchiffrement des données, vous ne pouvez donc pas générer à chaque fois une nouvelle clé. Après avoir crypté les données, vous devez stocker la clé, mais comme c'est quelque chose qui vous permet de déchiffrer les données, n'oubliez pas de la stocker de manière sécurisée !

La clé générée dans l'exemple ci-dessus est constituée d'octets aléatoires. De telles clés sont très sécurisées, mais vous avez souvent besoin que votre cryptage soit basé sur un mot de passe - par mot de passe, j'entends une phrase facilement compréhensible par les humains et fournie dynamiquement par l'utilisateur en entrée. Vous trouverez ci-dessous le code Python montrant comment obtenir un mot de passe de l'utilisateur en entrée et comment le transformer en clé de cryptage :

# import utility for Base64 encoding
import base64
# import Fernet
from cryptography.fernet import Fernet
# import getpass for secure input reading
from getpass import getpass
# read plain text password
plain_text_password: str = getpass(prompt='Password: ')
# Fernet requires 32 byte key, so the password also must have 32 characters
if len(plain_text_password) != 32:
    raise RuntimeError(f'Password length must be equal 32!')
# Encode plain text password to ASCII bytes
password_ascii: bytes = plain_text_password.encode('ascii')
# Fernet requires key to be url-safe base64-encoded
key: bytes = base64.urlsafe_b64encode(password_ascii)
# Create a Fernet instance providing the generated key
fernet = Fernet(key)
# Encrypt the data
data = b'Some secret data'
encrypted_data = fernet.encrypt(data)
# Decrypt the data
decrypted_data = fernet.decrypt(encrypted_data)
print(f"Decrypted text: {decrypted_data.decode()}")
Copier après la connexion

Remarque pour les avancés : ce pikoTutorial se concentre sur la façon d'utiliser Fernet pour le cryptage symétrique, il simplifie donc la création de la clé de cryptage. En pratique, lorsque vous devez créer une clé de cryptage à partir du mot de passe fourni par l'utilisateur, vous devez utiliser une fonction de dérivation de clé telle que PBKDF2HMAC.

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!

source:dev.to
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal