用户验证(使用sha1)

时间:2010-09-19 05:32:31

标签: php sql encryption

我正在创建一个登录表单。我正在学习如何使用SHA-1加密密码。我使用SHA-1加密用户在注册期间创建的密码。在数据库中,我输入了假装的用户名和密码数据,以便有一些工作。我在登录表单上工作时遇到了问题。

// Database Connection

$con = getConnection();

$sqlQuery = mysql_query("SELECT count(*) from Customers
                         WHERE Email = '$email' and Password = sha1('$passLogin')") 

// Executing query
$result = $con->mysql_result($sqlQuery, "0");

if ($result == 0) {
    echo "Can not login, try again.";
} else {
    echo "Login Good!";
}

3 个答案:

答案 0 :(得分:2)

  

我正在学习如何使用sha1   加密密码。

...使用sha1来哈希密码。哈希与加密不同。加密是可逆的,哈希则不是。 (或不应该)。现在,......

  1. 您必须确保数据库中的密码经过哈希处理。

  2. 通常你在PHP端进行散列。

  3. 你应该使用腌制来使彩虹表攻击变得不可行。阅读Just Hashing is Far from Enough for Storing Password

  4. 那就是说,我会像这样做认证部分:

    $hashedAndSalted = sha1($passLogin . $yourSalt);
    
    $sqlQuery = mysql_query("SELECT Email FROM Customers WHERE Email = '$email' AND Password = '$hashedAndSalted'");
    
    if (mysql_num_rows($sqlQuery) == 1) {
        echo 'Login successful';
    } else  {
        echo 'Could not login';
    }
    

答案 1 :(得分:0)

另请注意,如果您尚未清理表单输入,则可以SQL injection开放。

如果用户在“电子邮件”字段中输入以下内容:

' or '1'='1

他们将登录:)

您应该使用mysql_real_escape_string来逃避$email$passLogin,甚至更好地使用预先准备好的陈述。

答案 2 :(得分:0)

用以下内容替换您的查询:

$sqlQuery = mysql_query("SELECT count(*) from Customers
                WHERE Email = '".$email."' and Password = '".sha1($passLogin)."'");

请记住要始终手动连接字符串和变量,不要依赖PHP来为您完成。此外,您忘记了该行后面的分号;。每行必须在PHP中附加分号。