Как я могу добавить соль к текущему хеш-паролю, когда пользователь регистрируется. И как я должен хранить свой пароль в моей базе данных MySQL?
Вот мой PHP-код.
if ($_POST['password1'] == $_POST['password2']) {
$sha512 = hash('sha512', $_POST['password1']);
$password = mysqli_real_escape_string($mysqli, $purifier->purify(strip_tags($sha512)));
} else {
$password = NULL;
}
$salt = 'my-secret-salt-92h3nc29378ry293';
...
$sha512 = hash('sha512', $salt . $_POST['password1']);
$password = mysqli_real_escape_string($mysqli, $sha512);
Чтобы солить пароль, вы просто соединяете его с другой строкой (солью) перед ее использованием. Вам также не нужно очищать и изгонять хешированный пароль, как вы, хеш не будет содержать ничего плохого.
Вы можете использовать одну соль для всех паролей, которую вы должны хранить где-то в центре вашего приложения. Альтернативно, создайте случайную соль для каждого пароля и сохраните ее вместе с хешированным паролем в базе данных.
Мне нравится хранить соль с хэшем пароля в базе данных и вычислять ее так:
$salt = "Su0";
$password = "mypassword0111";
$hash = md5(md5($password) . $salt);
Затем при входе в систему пользователя:
$sql = "SELECT * FROM user_table WHERE username = '...
//do db lookup
$hash = md5(md5($password_from_user_login) . $salt_from_db);
if($hash = $hash_from_db) {
$userloggedin = true;
}
Или что-то вроде этого
if ($_POST['password1'] == $_POST['password2']) {
$sha512 = hash('sha512', $_POST['password1']."salt"); //<--------------------
$password = mysqli_real_escape_string($mysqli, $purifier->purify(strip_tags($sha512)));
} else {
$password = NULL;
}
// vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
$user = $_POST['user'];
$db = mysql_connect('host', 'user', 'password');
mysql_select_db('database', $db);
mysql_query("UPDATES user_table SET pass=$password WHERE user=$user");
mysql_close($db);
Вы можете использовать algortithms, например:
sha512($password.$salt)
или sha512(sha512($password.$salt)
Это зависит от вас, как генерируется соль, если она хранится вместе с хешем пароля в базе данных.