0

我的问题解决了。我不期待更多的答案。所以,请不要投反对票,因为我需要一些声誉来投票支持其他帖子。谢谢

我尝试使用md5()登录系统,但它不加密密码。它仍然在我的数据库上显示原始密码。这是我的代码:

mysql_connect("$host", "$username", "$password")or die("cannot connect"); 
mysql_select_db("$db_name")or die("cannot select DB");

$myusername=$_POST['myusername']; 
$mypassword=md5($_POST['mypassword']); 



$sql="select * from $tbl_name where username='$myusername' and password='$mypassword'";
$result=mysql_query($sql);

$count=mysql_num_rows($result);

if($count==1){
session_register("myusername");
session_register("mypassword"); 
header("location:login_success.php");
}
else {
header("location:login.html");
}
?>

我只是将我的代码编辑为$mypassword=md5($_POST['mypassword']);

4

6 回答 6

9

您刚刚打印了 md5d 密码,在插入之前将其存储到变量中

$mypassword = md5($_POST['mypassword']);
$sql="select * from $tbl_name where username='$myusername' and password='$mypassword'";
$result=mysql_query($sql);

我认为您的逻辑有问题,您是否以加密形式存储密码?那么只有您可以通过此选择命令获取数据,否则$count=mysql_num_rows($result);始终为零

也请看这里

为什么我不应该在 PHP 中使用 mysql_* 函数?

于 2012-11-30T10:14:33.840 回答
3
SELECT MD5('testing'); 

例如

$sql="select * from $tbl_name where username='$myusername' and password=MD5($mypassword)";

在你的 sql

于 2012-11-30T10:15:26.393 回答
3

存储密码的未加盐 MD5 哈希值几乎与存储它们的明文相同。使用现成的硬件,每秒可以尝试 8 个 Giga 密码,这意味着您可以在不到一毫秒的时间内暴力破解包含大约 500,000 个单词的整个字典!

更重要的是,没有盐的 MD5 有大量预先计算的哈希表,所以只需获取您自己密码的 MD5 哈希,将其输入谷歌并查看原始密码是什么,或者最好不要这样做......

这就是为什么人们现在应该使用像BCrypt这样的慢速密钥派生函数。PHP 5.5 将拥有自己的功能password_hash()password_verify()准备就绪,以简化此任务。有一个适用于 PHP 5.3/5.4 的兼容包,可在password_compat下载。

我会邀请您在本教程中准备更多关于正确散列密码的信息。

于 2012-11-30T12:07:23.420 回答
1

现在您只需将加密密码回显到输出:

echo md5($mypassword);

你想要的是分配给$mypassword

$mypassword = md5($mypassword);
于 2012-11-30T10:13:47.083 回答
1

您必须转义您的字符串,以阻止 SQL 注入。至少使用mysql_real_escape_string(). 并且不要使用 MD5,使用 Sha1:

$mypassword = sha1($_POST['mypassword']);
$myusername = mysql_real_escape_string($_POST['myusername']);
$sql="select * from $tbl_name where username='$myusername' and password='$mypassword'";
$result=mysql_query($sql);
于 2012-11-30T10:19:04.213 回答
1

我建议您使用mysqlior PDO。您刚刚打印了 md5d 密码,您需要将其值存储到特定变量并将该变量用于您的查询中。要做到这一点,试试这个

<?php 
mysql_connect("$host", "$username", "$password") or die("cannot connect"); 

mysql_select_db("$db_name")or die("cannot select DB");

$myusername=$_POST['myusername']; 
$mypassword=$_POST['mypassword']; 

$newpassword = md5($mypassword);

$sql="select * from $tbl_name where username='".$myusername."' and password='".$mypassword."'";
$result=mysql_query($sql);

$count=mysql_num_rows($result);

if($count==1)
{
    session_register("myusername");
    session_register("mypassword"); 
    header("location:login_success.php");
}
else {
    header("location:login.html");
}
?>
于 2012-11-30T10:53:47.310 回答