1

我有一个现有的用户数据库,每个用户的密码都存储为 MD5 哈希。

我试图使用 PHP 创建一个登录表单(我也很新),但我似乎无法让它工作,我知道我的用户名和密码是正确的,但我仍然收到错误的错误,我是否必须转换我的在检查表中的用户名之前输入 MD5 的密码?

我目前有...

$sql="SELECT * FROM $tbl_name WHERE username='$myusername' and password='$mypassword'";

如果我回显我的密码,它会输出为文本而不是哈希

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

3 回答 3

1

除了在与数据库中的密码进行比较之前对您的密码进行哈希处理之外,您还应该在密码哈希处理中添加一个“盐”。这个“盐”只不过是您连接到密码的随机任意字符串,它会使您的散列密码“唯一”。我的意思是,如果有人知道什么是 md5('12345') 是字符串 'A',那么这个 salt 将使您的用户密码 '12345' 成为数据库中的字符串 'B'。因此,外人将无法很容易地识别出他们。因此,我建议您使用自定义函数 myHashMD5() 对密码进行哈希处理,该函数调用 md5() 添加正确的“盐”。除此之外,在 mysql 中,您应该将字符串与运算符 LIKE 进行比较,而不是 =。另外,我使用函数http://php.net/manual/en/function。为了避免 SQL 注入,你的代码很容易受到它的攻击。

于 2012-10-09T19:48:10.123 回答
0

只需将此行添加到您的代码旁边$mypassword=$_POST['mypassword'];

$mypassword = md5($mypassword);
于 2012-10-09T19:35:09.770 回答
0

您应该将密码的哈希与存储在数据库中的哈希值进行比较:

$hashedPassword = md5($password);
于 2012-10-09T19:32:21.387 回答