我对PHP比较陌生,我希望有人可以帮助我理解河豚和地穴。我完成了将加密密码插入数据库但我在用户身份验证方面遇到问题。我一直在查看SO上的不同帖子以及博客/教程,看起来他们中的任何一个都没有对存储的密码进行身份验证。我发现this blog和this 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()
。感谢任何帮助,谢谢!
答案 0 :(得分:0)
考虑使用IRCMaxell的Password Compat库:https://github.com/ircmaxell/password_compat这将为您提供password_hash()和password_verify()方法,它们使用BLOWFISH算法,并在php5.5中作为标准实现