如何在用户注册时向我的当前哈希密码添加salt。我应该如何在My 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;
}
答案 0 :(得分:2)
$salt = 'my-secret-salt-92h3nc29378ry293';
...
$sha512 = hash('sha512', $salt . $_POST['password1']);
$password = mysqli_real_escape_string($mysqli, $sha512);
要对密码进行加密,只需在对其进行哈希处理之前将其与另一个字符串(盐)连接即可。你也不需要像你那样净化和驱除散列密码,散列不会包含任何不好的内容。
您可以为所有密码使用一个盐,您应该将其存储在应用中的某个位置。或者,为每个密码创建一个随机盐,并将其与数据库中的散列密码一起保存。
答案 1 :(得分:0)
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);
答案 2 :(得分:0)
您可以使用以下算法:
sha512($password.$salt)
或sha512(sha512($password.$salt)
只要将盐与密码哈希一起存储在数据库中,您就可以了解盐的生成方式。
答案 3 :(得分:0)
我喜欢将带有密码哈希的salt存储在数据库中并按如下方式计算:
$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;
}
或类似的东西