Cryptage bidirectionnel : stockage des mots de passe récupérables
Introduction
Stockage sécurisé des mots de passe tout en autorisant les utilisateurs de les récupérer pose un défi. Le chiffrement symétrique peut répondre à ce besoin, mais comprendre les nuances de mise en œuvre est crucial.
Chiffrement et déchiffrement en PHP
Pour chiffrer et déchiffrer les mots de passe en PHP, envisagez d'utiliser le bibliothèques mcrypt ou OpenSSL. Voici un exemple utilisant mcrypt :
function encrypt($password, $key) { $iv = mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC), MCRYPT_DEV_URANDOM); return mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $key, $password, MCRYPT_MODE_CBC, $iv); } function decrypt($encryptedPassword, $key) { $iv = substr($encryptedPassword, 0, mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC)); $password = substr($encryptedPassword, mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC)); return mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $key, $password, MCRYPT_MODE_CBC, $iv); }
Algorithme le plus sûr
Le meilleur algorithme de chiffrement dépend du cas d'utilisation spécifique. Pour stocker les mots de passe, AES-256 (Rijndael) en mode CBC ou CTR est généralement considéré comme robuste.
Stockage de clé privée
Le stockage de la clé privée en toute sécurité est essentiel. Une approche recommandée consiste à utiliser une combinaison du mot de passe de l'utilisateur et d'un sel côté serveur. En PHP, cela peut être réalisé en utilisant :
$salt = mcrypt_create_iv(16, MCRYPT_DEV_URANDOM); $key = hash('sha256', $userPassword . $salt);
Clé privée comme entrée utilisateur
Si les utilisateurs sont dignes de confiance, leur demander de fournir la clé privée lors de la récupération les mots de passe peuvent offrir une sécurité supplémentaire. Cela protège contre les violations côté serveur.
Risques de sécurité
Les mots de passe cryptés peuvent être vulnérables à :
Stratégies d'atténuation
Pour atténuer ces risques, mettez en œuvre :
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!