-1

这是我第一次在我的应用程序中使用 PHP 原生密码函数。我使用以下代码存储了用户的密码:

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

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

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

方法一

$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';
}

方法二

$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';

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

4

1 回答 1

-1

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

于 2016-09-14T07:46:18.207 回答