在登录PHP MySql时检索salted MD5密码

时间:2014-02-07 02:50:08

标签: php mysql hash md5 salt

我一直在寻找,我找不到我认为合乎逻辑的答案。我将包括用于在注册(和正确验证)时插入的代码部分,以及用于选择希望您有想法的部分。

在注册页面上,我将密码作为随机唯一盐和用户所需密码的串联的MD5插入。 (如果这不足以存储密码,我愿意接受改进建议)。

$InsertQuery = "INSERT INTO login (firstname, lastname, username, password, salt, activation) VALUES ('$fnamePost', '$lnamePost', '$usernamePost', MD5('$salt$passwordPost'), '$salt','1')";

在登录页面上,我有以下代码来检查密码:

    $saltQuery = "SELECT * FROM login where username = '$username'";
$saltResult = mysql_query($saltQuery);
$saltArray = mysql_fetch_array($saltResult);
$saltPass = $saltArray['salt'];
    $query = "SELECT * FROM login WHERE username = '$username' AND password =   MD5('$saltPass$password')";


if($result1 = mysql_query($query)) {
    if($success1 = mysql_num_rows($result1) > 0) {

在此“success1”点,它返回零行,意味着用户名和密码不正确。

打印查询本身我似乎获得了MD5(saltpassword)搜索,但这与表中存储的密码不匹配。

我在这里缺少什么?

提前谢谢你。

添加:因此,问题出在注册页面所说的密码和登录页面上的选择查询试图匹配之间。

示例:注册密码:5586ef3ede51ef5b41676801d6870574 - 登录密码:f90dacb09ffd1cbf4bdf13b3175da696

这意味着在添加盐和MD5之间的某个地方,我们会得到不同的结果。

2 个答案:

答案 0 :(得分:0)

你确定这条线路正常吗?

$InsertQuery = "INSERT INTO login (firstname, lastname, username, password, salt, activation) VALUES ('$fnamePost', '$lnamePost', '$usernamePost', MD5('$salt$passwordPost'), '$salt','1')";

因为你将MD5函数放入一个字符串中..我不认为它会解决你的问题,但是你尝试了类似

的东西吗?

$variable = md5($salt$passwordPost)然后在查询中插入$variable

答案 1 :(得分:0)

答案是我把盐限制在桌子上的12个字符,但指定它更长。因此,密码字段是盐的较长版本和用户输入的密码之间的连接,但盐只是唯一ID的前12个字符。

感谢您的帮助。