2013-06-29 22 views
3

由於PHP 5.5.0什麼了!hash_pbkdf2 VS password_hash PHP函數

  1. 哪一個是更好地使用(安全性,便攜性,面向未來的)?

  2. 它說password_hash()PASSWORD_DEFAULT可以在每個完全釋放改變(+1.0或+ 0.1),所以我們如何使用新的默認以前默認的方法散列密碼?這是否意味着在用戶更改密碼之前,具有已經散列在數據庫中的密碼的PHP 5.5腳本將無法在PHP 5.6上運行?那麼成本更改(我想知道如果服務器可以更新到PHP V5.6,或網站管理員可能會更改託管服務提供商(然後更改較弱/較強的服務器的成本),沒有任何爲當前用戶的問題)

  3. 我們應該等待一些更新或者是他們已經安全的5.5.0

  4. 使用我們應該仍然使用PHPass等框架或這些新的PHP 5.5的功能是夠了, /或者更多的未來證明?

回答

6
  1. 的是優選的,因爲它們更自動化的過程中,如選擇一個鹽,驗證口令和重散列password hashing functions(如password_hash)。

  2. password_verify函數將自動檢測用於生成散列的算法,所以沒有兼容性問題。

  3. 這些函數都在PHP的發佈版本中,所以它們應該沒問題。

  4. 如果您的代碼需要在早於5.5版本的PHP上運行,請使用PHPass或Shim,如password_compat。否則,請使用密碼散列函數。

4

新功能password_hash()僅僅是圍繞着功能crypt()的包裝,並簡化其使用。 crypt函數返回這種形式的散列:

algorithm (BCrypt) 
| cost factor (10) 
| | salt     hash-value 
| | |      | 
-- -- ----------------------------------------------------- 
$2y$10$nOUIs5kJ7naTuTFkBy1veuK0kSxUFXfuaOKdOKf9xYT0KKIGSJwFa 

這意味着該算法,所有參數都包括在內,所必需的比較與存儲的哈希值的輸入的密碼。即使默認算法會改變,函數password_verify()也將能夠識別使用的算法,並且可以使用較早的算法來驗證密碼。

所以這個新的密碼API肯定是散列你的密碼的最有前途的方法。您甚至可以在compatibility pack的舊版PHP中使用它。