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
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()}")
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()}")
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!