[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.