Edit 2017/11/09 :Assurez-vous de jeter un œil à la réponse d'O Jones.
Tout d'abord, MD5 n'est pas la meilleure méthode de hachage que vous puissiez utiliser pour cet essai sha256 ou sha512
Cela dit, utilisons hash('sha256')
au lieu de md5()
pour représenter la partie de hachage du processus.
Lorsque vous créez un nom d'utilisateur et un mot de passe pour la première fois, vous hachez le mot de passe brut avec du sel (quelques caractères supplémentaires aléatoires ajoutés à chaque mot de passe pour les rendre plus longs/plus forts).
Cela pourrait ressembler à ceci provenant du formulaire de création d'utilisateur :
$escapedName = mysql_real_escape_string($_POST['name']); # use whatever escaping function your db requires this is very important.
$escapedPW = mysql_real_escape_string($_POST['password']);
# generate a random salt to use for this account
$salt = bin2hex(mcrypt_create_iv(32, MCRYPT_DEV_URANDOM));
$saltedPW = $escapedPW . $salt;
$hashedPW = hash('sha256', $saltedPW);
$query = "insert into user (name, password, salt) values ('$escapedName', '$hashedPW', '$salt'); ";
Ensuite, lors de la connexion, cela ressemblera à ceci :
$escapedName = mysql_real_escape_string($_POST['name']);
$escapedPW = mysql_real_escape_string($_POST['password']);
$saltQuery = "select salt from user where name = '$escapedName';";
$result = mysql_query($saltQuery);
# you'll want some error handling in production code :)
# see http://php.net/manual/en/function.mysql-query.php Example #2 for the general error handling template
$row = mysql_fetch_assoc($result);
$salt = $row['salt'];
$saltedPW = $escapedPW . $salt;
$hashedPW = hash('sha256', $saltedPW);
$query = "select * from user where name = '$escapedName' and password = '$hashedPW'; ";
# if nonzero query return then successful login