2016-12-28 99 views
2

我剛剛瞭解到,PHP有一個password_hash()函數,而不是手動調用密碼的哈希算法。 http://php.net/manual/en/function.password-hash.php我不明白password_hash()函數

但我有兩個關於文檔的問題。

  1. 第一個是關於默認哈希算法,使用PASSWORD_DEFAULT作爲算法。由於PHP 5.5的算法是bcrypt,然後它說:

注意,這個常數被設計成新的,更強的 算法被添加到PHP隨時間而改變。因此,使用該標識符的結果的長度可以隨時間變化。因此, 建議將結果存儲在數據庫中的列,可以 擴大超過60個字符(255個字符將是一個不錯的選擇)

我怎麼仍然保持用戶能夠後登錄散列算法會改變,如果我只保留散列的結果,並且密碼散列的結果會變得不同?

  • 根據salt選項它說:
  • 警告鹽選項已被棄用PHP 7.0.0的。現在是 首選簡單地使用默認生成的鹽。

    如果該函數會產生一個salt,那麼對於相同的密碼,在兩次不同的執行過程中產生的hash不會不同麼?除非產生鹽的算法是這樣的,即相同的密碼總是會得到相同的鹽,但是這會破壞使用鹽的目的,不是嗎?

    +0

    可能重複[如何bcrypt有內置鹽?](http://stackoverflow.com/questions/6832445/how-can-bcrypt-have-built-in-salts) – Jerodev

    回答

    1

    如果我只保留散列結果並且密碼散列的結果會變得不同,我該如何在散列算法更改之後仍然保持用戶能夠登錄?

    如果該函數會產生一個salt,那麼對於相同的密碼,在兩次不同的執行過程中產生的散列值是否會不同?

    password_verify()功能將檢測用於散列的特定密碼並據此採取行動的哈希(和鹽)。

    使用該功能檢查用戶輸入的密碼是否正確。

    +0

    哦,現在我明白了....改變算法部分tho怎麼樣?如果我使用'PASSWORD_DEFAULT'參數開始使用它,但是默認算法在下一個版本中發生變化,那麼我的用戶將不能再登錄,因爲比較的散列值將不正確? –

    +0

    @ImNotMike不,它仍然有效。所使用的算法以及配置和salt記錄在散列中。 – duskwuff

    +0

    我想你誤解了我的意思。就像,如果你註冊我的網站,並且我今天保存你的密碼哈希值,那麼明天我升級PHP,因此password_hash算法發生變化,你仍然可以登錄嗎?我所有存儲的是你的(舊)密碼散列。但是明天當執行登錄時的哈希處理時,輸入的密碼哈希將與我爲數據庫中存儲的密碼哈希不同,即使輸入的密碼相同。 –