试图哈希我的密码但没有成功

时间:2011-04-22 09:31:23

标签: php security md5 salt

我对php安全性相当新,对于我的网站,我是一个注册和登录,我想添加md5他们的密码,但我找不到任何有明确指导需要的地方添加到注册,以及需要添加到登录文件和/或数据库的内容,正如我所说我在网络安全方面对php相当新,所以我需要一些帮助,这里是我在注册表格上的内容:

    $error = $user = $pass = "";
if (isset($_SESSION['user'])) destroySession();

if (isset($_POST['user']))
{
    $user = sanitizeString($_POST['user']);
    $pass = sanitizeString($_POST['pass']);


    if ($user == "" || $pass == "")
    {
        $error = "Not all fields were entered<br /><br />";
    }
    else
    {
        $query = "SELECT * FROM members WHERE user='$user'";

        if (mysql_num_rows(queryMysql($query)))
        {
            $error = "Username already taken<br /><br />";
        }
        else
        {
            $query = "INSERT INTO members VALUES('$user', '$pass')";
            queryMysql($query);
            die("<h4>Account created</h4>Please Log in.");
        }

    }
}

我只需要一个示例或指导我需要做些什么才能使其正常工作。

2 个答案:

答案 0 :(得分:4)

我认为你正在寻找盐,然后哈希你的密码。只需将您选择的字符串添加到密码的前面(如果您愿意,最后),然后使用MD5进行散列。

e.g。

$pass = 'mypassword';
$salt = 'S%gh3578';  //anything you want
$pepper = 'w890rrk'; //anything you want
$query = "INSERT INTO members VALUES('$user', md5('".$salt.$pass.$pepper."'))";
queryMysql($query);

这将使用加密的MD5加密将密码存储在数据库中,使用未加密的MD5加密,使用常见密码查找表无法对其进行反转。

要检查密码是否有效,您可以执行类似的操作:

$passToCheck = 'something';
$correctMD5 = (retrieve hash from db)
if($salt.$passToCheck.$pepper == $correctMD5)
{    
   //valid login
} else {
   //login failure
}

答案 1 :(得分:-1)

您可以在插入之前和用户登录时使用md5($ pass),再次md5并检查值是否相同。没有办法de-md5,所以你通常会根据md5数据库值检查md5输入。