Dans une application Python 3, je dois chiffrer les données de l'utilisateur à l'aide de son propre mot de passe. J'utilise la bibliothèque Cryptodome. Etant donné que AES a besoin d'une clé de taille fixe (128 bits dans l'exemple), j'ai utilisé PBKDF2 pour obtenir la clé. Voici la classe que j'utilise dans mon code.Classe d'exemple de chiffrement AES pour chiffrer des données à l'aide du mot de passe de l'utilisateur
I stocker le sel (sel dans le code) utilisé pour la dérivation de clé et le vecteur d'initialisation (IV dans le code) dans la partie supérieure du message lui-même. En effet, pour ce que j'ai compris (lire les docs here) ni le sel ni le iv ne doivent être gardés secrets.
Est-ce une approche correcte ou pouvez-vous me suggérer une meilleure approche?
from Crypto.Cipher import AES
from Crypto.Random import get_random_bytes
from Crypto.Protocol import KDF
class crypto:
def __init__(self,pwd):
self.pwd = pwd
def encrypt(self,data):
salt = get_random_bytes(8)
key = KDF.PBKDF2(self.pwd,salt) #128bit key derivation function
iv = get_random_bytes(16)
cipher = AES.new(key, AES.MODE_CFB, iv)
return salt + iv + cipher.encrypt(data)
def decrypt(self,msg):
key = KDF.PBKDF2(self.pwd,msg[:8])
cipher = AES.new(key, AES.MODE_CFB, msg[8:24])
return cipher.decrypt(msg[24:])
Merci d'avance.
Oui, vous avez raison. – decadenza