Редактиране 2017/11/09:Не забравяйте да погледнете отговора от O Jones.
Първо, MD5 не е най-добрият метод за хеширане, който бихте могли да използвате за този опит sha256 или sha512
Това каза, нека използваме hash('sha256')
вместо md5()
за представяне на хеширащата част от процеса.
Когато за първи път създадете потребителско име и парола, ще хеширате необработената парола с малко сол (някои произволни допълнителни символа, добавени към всяка парола, за да ги направите по-дълги/по-силни).
Може да изглежда нещо подобно, идващо от формуляра за създаване на потребител:
$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'); ";
След това при влизане ще изглежда така:
$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