存储哈希的用户身份验证 - Crypt和Blowfish

时间:2014-09-03 15:17:48

标签: php authentication blowfish

我对PHP比较陌生,我希望有人可以帮助我理解河豚和地穴。我完成了将加密密码插入数据库但我在用户身份验证方面遇到问题。我一直在查看SO上的不同帖子以及博客/教程,看起来他们中的任何一个都没有对存储的密码进行身份验证。我发现this blogthis post半帮助但是在存储密码后无法确定身份验证。 在注册时,用户的密码输入使用此功能加密,然后存储在users表中:

function crypt_pass($pass){
    if(defined("CRYPT_BLOWFISH") && CRYPT_BLOWFISH){
        $salt = '$2y$11$'.substr(md5(uniqid(rand(), true)), 0, 22);
        return crypt($pass, $salt);
    }
}

然后在登录时,这是函数:

function user_authenticate($username, $password_input){
    include '../connection/dbconnect.php';
    $errors = "";
    if ($user_exists->num_rows < 1 || $user_exists->num_rows > 1){
       //other checks - username, activated status, etc.
    } else{
        $user_match = $connect->query("SELECT `user_id` FROM `users` WHERE `user_name` = '$username' LIMIT 1");
        $user_id = $user_match->fetch_assoc();
        $get_pw = $connect->query("SELECT `pass_w` FROM `users` WHERE `user_name` = '$username'");
        $pw_match = $get_pw->fetch_assoc();
        if ($user_match->num_rows != 1 || crypt($password_input, $pw_match['pass_w']) != $pw_match['pass_w']){
            $errors = 'That username/password combination is incorrect';
            return $errors;
        } else{
            return true;
        }
    }

输入正确的密码会给我&#34;该用户名/密码组合不正确&#34;。我相信我已按照我所阅读的帖子中的说明使用crypt()。感谢任何帮助,谢谢!

1 个答案:

答案 0 :(得分:0)

考虑使用IRCMaxell的Password Compat库:https://github.com/ircmaxell/password_compat这将为您提供password_hash()和password_verify()方法,它们使用BLOWFISH算法,并在php5.5中作为标准实现