Rediger 2017/11/09:Sørg for at tage et kig på svaret fra O Jones.
Først og fremmest er MD5 ikke den bedste hashmetode, du kan bruge til denne prøve sha256 eller sha512
Når det er sagt, lad os bruge hash('sha256')
i stedet for md5()
at repræsentere hashing-delen af processen.
Når du først opretter et brugernavn og en adgangskode, vil du hash den rå adgangskode med lidt salt (nogle tilfældige ekstra tegn tilføjet til hver adgangskode for at gøre dem længere/stærkere).
Det kan se sådan ud fra formularen til oprettelse af bruger:
$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'); ";
Så ved login vil det se nogenlunde sådan her ud:
$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