2016-09-14 41 views
-1

這是我第一次在我的應用程序中使用PHP本地密碼功能。我使用以下代碼存儲用戶密碼:password_verify()或比較哈希用戶輸入與PHP中存儲的密碼?

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

並將結果存儲在數據庫中。現在我想在登錄過程中驗證用戶。

我的問題是在這裏。我有2種選擇:

方法1種

$sql = "SELECT id,password FROM tbl_members WHERE email = ? LIMIT 1"; 
$result = $this->db->query($sql,array('[email protected]')); 
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('[email protected]',$user_hashed_password)); 
if ($result->num_rows()) echo 'Successful Login'; 

哪種方法更適合於一個登錄過程?

+0

其中一個很容易受到定時攻擊,另一個不是。 API提供是有原因的。用它。 – PeeHaa

+1

@PeeHaa其實......一個*作品*,另一個不... – deceze

+0

password_hash對我來說更安全, – Beginner

回答

-1

第一種方法是最好的,就像它應該使用的一樣。加密,salt等存儲在哈希字符串中,所以如果您更改加密,舊的存儲散列仍然有效,而且更多,您不需要存儲salt和算法,只需存儲散列。