Хорошо, поэтому весь приведенный ниже код не является моим собственным. Я слежу за учебником в Интернете, но когда я пытаюсь запустить его, пароль не подходит. Я считаю, что может возникнуть ошибка при засовывании пароля, так как то, что находится в базе данных, нигде не находится рядом с 64 символами, описанными в скрипте login.php. Понятия не имею. Код ниже:Пароли не совпадают, когда хеширование/соление
register.php
// Create a 256 bit (64 characters) long random salt
// Let's add 'something random' and the username
// to the salt as well for added security
$salt = hash('sha256', uniqid(mt_rand(), true) . 'something random' . strtolower($username));
// Prefix the password with the salt
$hash = $salt . $password;
// Hash the salted password a bunch of times
for ($i = 0; $i < 100000; $i ++)
{
$hash = hash('sha256', $hash);
}
// Prefix the hash with the salt so we can find it back later
$hash = $salt . $hash;
// carry on with registration code...
login.php
$email = $_POST['email'];
$password = $_POST['password'];
$con = mysql_connect("localhost", "redacted", "redacted", "redacted");
$sql = '
SELECT
`password`
FROM `users`
WHERE `email` = "' . mysql_real_escape_string($email) . '"
LIMIT 1
;';
$r = mysql_fetch_assoc(mysql_query($sql));
// The first 64 characters of the hash is the salt
$salt = substr($r['password'], 0, 64);
$hash = $salt . $password;
// Hash the password as we did before
for ($i = 0; $i < 100000; $i ++)
{
$hash = hash('sha256', $hash);
}
$hash = $salt . $hash;
if ($hash == $r['password'])
{
session_start();
header('Location: /quiz/index.php');
}
if($hash != $r['password']){
session_start();
header('Location: /?error=4');
}
// end login script
Какой учебник? У PHP есть множество дерьмовых учебников в Интернете. Кажется, это один из них. – alex
Общей ошибкой является то, что поля базы данных недостаточно длинны, чтобы хранить все символы. – Konerak
Ahhh ... вот почему. Поле моего пароля было всего 30 символов. Cheers @ Konerak :-) –