我的php crypt()函数有问题,它会生成不同的密码
这是将测试用户添加到数据库的代码:
$hash = crypt('roms','rc');
$data = array('username' => 'roms', 'password' => $hash, 'email' => 'roms@r.c');
$this->db->insert('users',$data);
这是登录功能:
// user login function
public function userLogin($username, $password){
$results = $this->db->select('select * from users where username = :username',
array(':username'=>$username));
// print_r($results);
$pass = $results[0]->password;
// echo '<br>';
// echo crypt('roms','rc');
// echo '<br>';
// echo $password;
// echo '<br>';
// echo $pass;
if( (count($results) > 0) ){
//echo ">0";
if($pass == $password){
return true;
}
}
return false;
}
该功能的结果: 它工作但从不传递if($ pass == $ password)条件,因为传递的哈希值与存储在数据库中的哈希值不同
// print_r($results);
Array ( [0] => stdClass Object ( [id] => 7 [username] => roms [password] => rc7y3Ie22wNUQ [email] => roms@r.c ) )
// echo crypt('roms','rc'); (crypt the original password)
rc7y3Ie22wNUQ
// echo $password; (passed to the function)
rcKGHUlyQfgrU
// echo $results[0]->password; (from the database)
rc7y3Ie22wNUQ
这是登录函数调用
if(isset($_POST['user-login'])){
$db = new DbHelpers();
$username = $_POST['username'];
$password = crypt($_POST['passowrd'],'rc');
$bool = $db->userLogin($username, $password);
if($bool){
//echo "<script>alert('1');</script>";
$_SESSION["username"] = $username;
\Helpers\Url::redirect('admin');
}else{
//echo "<script>alert('0');</script>";
$data['login-error'] = '1';
}
}
请注意,我使用的是simple mvc framework,它有一个用于哈希密码的密码类,但是当我使用它时遇到了同样的问题。我也尝试过md5功能。
答案 0 :(得分:0)
这是因为变量拼写不正确,而您生成的哈希值是空字符串
$password = crypt($_POST['passowrd'], 'rc');
应该是:
$password = crypt($_POST['password'], 'rc');
当我跑步时:
echo crypt('', 'rc')
输出:rcKGHUlyQfgrU