如何在 mysql 中创建和存储 md5 密码

2022-08-30 18:01:41

这可能是一个非常新手的问题,但是,我一直在阅读,并在理解密码的创建和存储方面发现了一些困难。从我所读到的内容来看,md5 / hash密码是将它们存储在数据库中的最佳方法。但是,我首先要如何创建这些密码?

所以假设我有一个登录页面与用户鲍勃,和密码鲍勃123 - 我将如何1。将 bobs 密码放入数据库,以(散列)2 开头。如何检索和确认散列密码?

谢谢


答案 1

编辑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

答案 2

您必须根据haed密码进行推理:

存储密码,就像 bob 注册到你的应用时一样md5('bob123');

$query = "INSERT INTO users (username,password) VALUES('bob','".md5('bob123')."');

然后,当 bob 登录时:

$query = "SELECT * FROM users WHERE username = 'bob' AND password = '".md5('bob123')."';

obvioulsy使用变量作为用户名和密码,这些查询由php生成,然后您可以在mysql上执行它们


推荐