如何在 mysql 中创建和存储 md5 密码
2022-08-30 18:01:41
这可能是一个非常新手的问题,但是,我一直在阅读,并在理解密码的创建和存储方面发现了一些困难。从我所读到的内容来看,md5 / hash密码是将它们存储在数据库中的最佳方法。但是,我首先要如何创建这些密码?
所以假设我有一个登录页面与用户鲍勃,和密码鲍勃123 - 我将如何1。将 bobs 密码放入数据库,以(散列)2 开头。如何检索和确认散列密码?
谢谢
这可能是一个非常新手的问题,但是,我一直在阅读,并在理解密码的创建和存储方面发现了一些困难。从我所读到的内容来看,md5 / hash密码是将它们存储在数据库中的最佳方法。但是,我首先要如何创建这些密码?
所以假设我有一个登录页面与用户鲍勃,和密码鲍勃123 - 我将如何1。将 bobs 密码放入数据库,以(散列)2 开头。如何检索和确认散列密码?
谢谢
编辑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
您必须根据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上执行它们