php - 如何使用md5哈希值?

标签 php mysql hash md5

好吧,所以我正在学习 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/

相关文章:

Javascript:如果确认从不同的函数返回真则触发

php - 从 Swift 检索数据到 PHP,然后返回到 Swift

PHP/MYSQL - 多个连接到同一个数据库?

mysql - mysql 将两个结果合并为一个结果集

hash - 如何在c#中实现pbkdf2_sha256

java - 通过循环多项式对 n-gram 进行哈希处理 - java 实现

php - 我可以在没有任何消息的情况下使用 throw 吗?

java - MySql 本地数据库

php - 如何从数据库创建 Codeigniter 语言文件?

bash - 如何在 bash 中导出关联数组(哈希)?