[niveau: intermédiaire]
Il a été démontré que le stockage de mot de passe n’est pas chose aisée, et que l’utilisation d’une méthode de hashage (MD5, SHA-1, etc) n’est pas parfaite, même avec l’utilisation d’un salt. D’après cette constatation plusieurs articles indiquent que la meilleure méthode reste l’utilisation de bcrypt
, comme on peut le lire dans How to safely store a password.
L’utilisation de bcrypt
est assez simple :
1) Télécharger phpass (fichier .tgz qui contient un fichier PasswordHash.php);
2) Appeler PasswordHash.php dans votre page :
<?php require('includes/PasswordHash.php'); ?>
3) Maintenant vous pouvez utiliser l’objet PasswordHash comme cela :
<?php $password = $_POST["password"]; $hasher = new PasswordHash(8, FALSE); $hash = $hasher->HashPassword($password); ?>
Et pour vérifier un mot de passe, vous devez utiliser ce petit bout de code :
<?php // vérification du mot de passe $password = $_POST["password"]; $password_correct = "password qui vient de la base de données"; /* Le hash stocké précédemment */ $hasher = new PasswordHash(8, FALSE); $check = $hasher->CheckPassword($password, $password_correct); if ($check) { echo "Password correct!"; } else { echo "Password incorrect..."; } ?>
A noter que si vous souhaitez le rendre compatible avec d’autres systèmes équivalents (comme BCrypt pour Java par exemple), alors il faudra vous assurer que votre machine a bien CRYPT_BLOWFISH d’installé (on peut le voir avec <?php echo CRYPT_BLOWFISH; ?>
) afin d’avoir une bonne compatibilité des deux systèmes.