password_verify()或将散列的用户输入与PHP中存储的密码进行比较?

时间:2016-09-14 07:43:11

标签: php php-password-hash

这是我第一次在我的应用程序中使用PHP本机密码功能。我使用以下代码存储了用户的密码:

password_hash($this->input->post('password'),PASSWORD_BCRYPT);

结果存储在数据库中。现在我想在登录过程中验证用户。

我的问题在这里。我有两个选择:

方法1

$sql = "SELECT id,password FROM tbl_members WHERE email = ? LIMIT 1";
$result = $this->db->query($sql,array('user@site.com'));
if ($result->num_rows()) {
   $row = $result->row();
   $hash = $row->password;
   if (password_verify($this->input->post('password'), $hash)) echo 'Successful login';
}

方法2

$hash = password_hash($this->input->post('password'),PASSWORD_BCRYPT);
$sql = "SELECT id FROM tbl_members WHERE email = ? AND password = ? LIMIT 1";
$result = $this->db->query($sql,array('user@site.com',$user_hashed_password));
if ($result->num_rows()) echo 'Successful Login';

哪种方法更适合登录过程?

1 个答案:

答案 0 :(得分:-1)

第一种方法是最好的,并且应该使用它。加密,盐等存储在哈希字符串中,因此如果更改加密,旧的存储哈希值仍然有效,而且更多,您不需要存储salt和算法,只需存储哈希。