2010-09-29 89 views
0

如何在用户注册时将盐添加到当前的散列密码中。我应该如何在我的MySQL数据库中存储我的密码?PHP和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

您可以详细说明“如何存储”部分吗?你的意思是如何将其插入数据库,或者你需要什么数据库模式? – deceze 2010-09-29 01:35:39

+0

我想知道是否有任何特殊的方式需要将其插入MySQL数据库? – HELP 2010-09-29 01:38:39

+0

这只是一个字符串,像处理任何其他文本一样处理它。 – deceze 2010-09-29 01:48:02

回答

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); 
+0

@snag“salt”指的是在哈希前的密码之前或之后添加的任何内容,给它一个不同的散列字符串。在这种情况下,我使用了字符串“salt”作为我的盐。你可以使用任何你想要的东西,但要确保它是一种盐,你可以在比较密码时再次使用它,否则你将永远无法登录! (通常建议设置一个恒定的盐,有些人使用用户名或其他参数作为盐) – stevendesu 2010-09-29 01:22:30

0

你可以使用像algortithms:

sha512($password.$salt)sha512(sha512($password.$salt)这是给你的盐是如何产生的,只要它被用在数据库中的密码哈希一起保存。

2
$salt = 'my-secret-salt-92h3nc29378ry293'; 

... 

$sha512 = hash('sha512', $salt . $_POST['password1']); 
$password = mysqli_real_escape_string($mysqli, $sha512); 

要对一个密码进行密码处理,只需在对其进行哈希处理之前将其与另一个字符串(盐)连接即可。你也不需要象你那样净化和驱除散列密码,散列不会包含任何不好的东西。

您可以对所有密码使用一个salt,您应该将它们集中存储在应用程序的某个位置。或者,为每个密码创建一个随机盐,并将其与哈希密码一起保存在数据库中。

0

我喜欢盐存储在数据库中的密码哈希和计算它是这样的:

$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; 
} 

或者类似的东西