如何使用md5哈希?

时间:2011-01-10 01:46:41

标签: 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."; 

}  

?> 

但我仍然得到其他声明,“用户名或密码错误。有人帮助PLZ!”

7 个答案:

答案 0 :(得分:1)

请使用SHA1 / 256。 MD5不再具有加密安全性,不鼓励将其用于加密(对于文件哈希ETC来说很好)。

我不是在发布代码,而是在解释技术:

首先,在注册时,获取密码的SHA1 / 256哈希并将其存储在数据库中。用户下次登录时,再次输入他/她输入的密码的SHA1 / 256哈希值,并将其与存储在数据库中的哈希值进行匹配。这是有效的,因为密码的SHA1哈希值对于该密码是半唯一的(重复的可能性很小)。

答案 1 :(得分:1)

答案很简单:你在数据库中有一个哈希,所以你需要哈希用户提供的密码来比较它们。

因此,当用户尝试登录时,您可以使用$_POST['password']或其他内容,并创建它的哈希值。然后,您只需在数据库中查询哈希值SELECT * FROM users WHERE password = 'hashgoeshere'

我还建议您阅读有关密码安全存储的更多信息。例如,这是一个好的开始:You're probably storing passwords incorrectly - Coding Horror

答案 2 :(得分:0)

它会对密码进行哈希处理,因此不会以明文形式保存 例如mylongpassword变为9a995d3f6a3d69c1a9b4344bed4f2c87

使用db First

选择散列密码
$password_from_db = Select * from user where username='".$_POST['username']."'

然后,应该先在PHP中对来自($ _POST ['password'])的密码进行哈希处理,然后将其与存储在数据库中的值进行比较

<?       
   if (md5($_POST['password'])==$password_from_db){
      return true;
   }else{
      return false;
   }
?>

答案 3 :(得分:0)

而不是插入SQL数据库,将一些查询分配给变量并根据用户给出的md5进行检查

答案 4 :(得分:0)

当用户尝试使用他们的密码登录时,您可以获取他们输入的内容的md5,并将其与您已存储在数据库中的内容进行比较。如果匹配,则表示他们输入了正确的密码。

答案 5 :(得分:0)

<强>被修改 你的代码似乎没问题。 检查数据库中的密码字段是否至少为32个字符。 并尝试在phpMyAdmin中执行此查询(将变量更改为实际字符串),如果您使用它。

答案 6 :(得分:0)

你也有一个重大的加密问题。

$password = md5($_POST['password']); 

问题在于所有拥有相同密码的人都会有相同的哈希值,所以如果(何时?)有人闯入你的网站,他们会进行一次字典攻击,然后将攻击中的哈希值与你的哈希值进行比较D B。因此,他们会破坏您网站上的每个帐户,其成本基本上与破解帐户相同。

至少,你应该加盐,就像这样:

$password = md5($_POST['user'] + $_POST['password']); 

但即便如此,也有令人惊讶的弱点,所以最好将它哈希两次,也许是这样:

$password = md5($_POST['password'] + md5($_POST['password'] + $_POST['user']));

当然,最好的方法是使用一些人,他们比我更了解如何正确地进行加密:)

(请记住,您的身份验证系统中的错误parf是一项功能。)