2016-08-25 48 views
-2

password_hash($password, PASSWORD_DEFAULT); 功能來保存用戶插入密碼MySQL數據庫,但 當我嘗試使用

$verify_password=password_verify ($password,PASSWORD_DEFAULT); 

檢查登錄它告訴我錯誤所以誰能告訴我什麼是錯誤。在密碼驗證php函數的默認參數如password_verify (string $password , string $hash)什麼是$ hash在此。

+1

哈希是什麼'password_hash'給你.. – tkausl

+0

其實我使用默認的散列函數即 password_hash($密碼,PASSWORD_DEFAULT);所以你可以告訴我什麼是在這個senario散列。 –

+2

'password_hash' __returns__散列,你確實將這個散列保存到數據庫中,對吧? – tkausl

回答

0

使用password_hash代替使用password_verify。

$verify_password=password_hash($password,PASSWORD_DEFAULT); 

password_hash()創建使用強大的單向散列算法,生成新密碼哈希。 password_hash()與crypt()兼容。因此,由crypt()創建的密碼哈希可以與password_hash()一起使用。目前支持

以下算法:

PASSWORD_DEFAULT - 使用bcrypt算法(默認爲PHP 5.5.0的)。請注意,隨着新的更強大的算法添加到PHP中,此常量將隨時間而改變。出於這個原因,使用這個標識符的結果的長度會隨着時間而改變。因此,建議將結果存儲在可擴展超過60個字符的數據庫列中(255個字符將是一個不錯的選擇)。

PASSWORD_BCRYPT - 使用CRYPT_BLOWFISH算法創建哈希。這將使用「$ 2y $」標識符產生標準的crypt()兼容散列。結果將始終爲60個字符的字符串,或者失敗時爲FALSE。 支持的選項:

  • 鹽手動提供一個鹽,以便在散列密碼時使用。請注意,這將覆蓋並防止鹽自動生成。

如果省略,每個密碼散列都會通過password_hash()生成一個隨機salt。這是預定的操作模式。

  • 代表應該使用的算法成本的代價。這些值的例子可以在crypt()頁面找到。

如果省略,將使用默認值10。這是一個很好的基準成本,但您可能需要考慮根據您的硬件來增加它。

+2

我知道這先生。 manish ji但我的問題只是如何檢查登錄 –

1

傳遞給password_verify()函數的參數是錯誤的。使用存儲的哈希作爲第二個參數來代替:

// Hash a new password for storing in the database. 
// The function automatically generates a cryptographically safe salt. 
$hashToStoreInDb = password_hash($password, PASSWORD_DEFAULT); 

// Check if the hash of the entered login password, matches the stored hash. 
// The salt and the cost factor will be extracted from $existingHashFromDb. 
$isPasswordCorrect = password_verify($password, $existingHashFromDb);