好吧,所以我正在学习 php、html 和 mysql 来学习网站开发(为了好玩)。我仍然不明白的一件事是如何使用 md5 或 sha1 哈希值。我知道如何对纯文本进行哈希处理,但假设我想制作一个登录页面。既然密码是经过哈希处理且无法逆转的,那么mysql如何知道用户插入的密码与数据库中的哈希密码相匹配呢?这就是我的意思:
$password = md5($_POST['password']);
$query = ("INSERT INTO `users`.`data` (`password`) VALUES ('$password')");
我知道这个脚本片段对密码进行了哈希处理,但是我将如何使用这段代码并创建一个登录页面?任何可行的例子都会很棒。
这是我的脚本:
<?php
session_start();
include("mainmenu.php");
$usrname = mysql_real_escape_string($_POST['usrname']);
$password = md5($_POST['password']);
$con = mysql_connect("localhost", "root", "g00dfor@boy");
if (!$con) {
die(mysql_error()); }
mysql_select_db("users", $con) or die(mysql_error());
$login = "SELECT * FROM `data` WHERE (`usrname` = '$usrname' AND `password` = '$password')";
$result = mysql_query($login);
if (mysql_num_rows($result) == 1) {
$_SESSION['logged_in'] = true;
header('Location: indexlogin.php');
exit;
}
else {
echo "Wrong username or password.";
}
?>
但我仍然收到 else 语句,“用户名或密码错误。有人帮忙!”
最佳答案
答案非常简单:数据库中有一个哈希值,因此您需要对用户提供的密码进行哈希值来比较它们。
因此,当用户尝试登录时,您将获取 $_POST['password']
或其他内容,并创建它的哈希值。然后,您只需在数据库中查询哈希值,SELECT * FROM users WHERE password = 'hashgoeshere'
我还建议您阅读有关密码安全存储的更多信息。例如,这是一个好的开始:You're probably storing passwords incorrectly - Coding Horror
关于php - 如何使用md5哈希值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4643085/