password_verify 尽管尝试了所有解决方案但仍无法正常工作 bcrypt()
password_verify not working despite trying all solutions bycrypt()
我有一个简单的登录系统,我正在使用 bycrypt 来确保安全,现在逻辑很简单我已经回应了每个变量一切看起来都很好我的列数据库也是 varchar(255)
所以我没有任何限制问题,而且我尝试了很多其他解决方案,但都是徒劳的,这是我的代码
db中原来存储的用户名是admin密码是admin123i运行password_hash('admin123', PASSWORD_BCRYPT)
函数生成密码我复制粘贴到数据库中!
function validate($data){
$this->db->select("username,password");
$this->db->from('admin');
$query = $this->db->get();
$res= $query->result();
$db_username= $res[0]->username;
$db_password= $res[0]->password;
$user_username= $data['login_username'];
$user_password= $data['login_password'];
$user_password=password_hash($user_password, PASSWORD_BCRYPT);
if($db_username==$user_username){
//returns true
if (password_verify($db_password, $user_password)) {
echo "1";//doesnot execute
}
}
else
{
echo "false";
}
}
有什么建议吗?
您确定参数以正确的顺序传递给 password_verify 吗?
文档中对该方法的描述说它是倒置的:
boolean password_verify ( string $password , string $hash )
由于您的哈希来自数据库,您可能应该像这样传递它:
password_verify($user_password, $db_password)
password_verify()
将 明文 密码作为其第一个参数——而不是密码的哈希值!
删除包含对 password_hash()
的调用的行。而且,正如 cristianorbs 提到的,来自数据库的散列应该是第二个参数。
(您可能还想将用户名作为参数传递给查询——否则,您将只能拥有一个管理员用户。)
我有一个简单的登录系统,我正在使用 bycrypt 来确保安全,现在逻辑很简单我已经回应了每个变量一切看起来都很好我的列数据库也是 varchar(255)
所以我没有任何限制问题,而且我尝试了很多其他解决方案,但都是徒劳的,这是我的代码
db中原来存储的用户名是admin密码是admin123i运行password_hash('admin123', PASSWORD_BCRYPT)
函数生成密码我复制粘贴到数据库中!
function validate($data){
$this->db->select("username,password");
$this->db->from('admin');
$query = $this->db->get();
$res= $query->result();
$db_username= $res[0]->username;
$db_password= $res[0]->password;
$user_username= $data['login_username'];
$user_password= $data['login_password'];
$user_password=password_hash($user_password, PASSWORD_BCRYPT);
if($db_username==$user_username){
//returns true
if (password_verify($db_password, $user_password)) {
echo "1";//doesnot execute
}
}
else
{
echo "false";
}
}
有什么建议吗?
您确定参数以正确的顺序传递给 password_verify 吗? 文档中对该方法的描述说它是倒置的:
boolean password_verify ( string $password , string $hash )
由于您的哈希来自数据库,您可能应该像这样传递它:
password_verify($user_password, $db_password)
password_verify()
将 明文 密码作为其第一个参数——而不是密码的哈希值!
删除包含对 password_hash()
的调用的行。而且,正如 cristianorbs 提到的,来自数据库的散列应该是第二个参数。
(您可能还想将用户名作为参数传递给查询——否则,您将只能拥有一个管理员用户。)