2013-07-01 51 views
2

我期待實現BCrypt到一個web應用的水平,但是我在如何整合/轉變工作/迭代/幾輪的水平左丟失:Bcrypt用PHP 5.4.16 - 工作

php.net crypt function狀態

從PHP 5.3.0起,PHP包含自己的實現。

據我所知,使用$pw = crypt($password);會自動創建一個隨機鹽對我來說,我也可以只存儲$pw在數據庫中。

我知道我可以使用檢查密碼有效性

if (crypt($user_input, $pw) == $pw)) { 
    // password is valid 
} else { 
    // password is not valid 
} 

我知道那Bcrypt那麼好,原因是bcrypt是一種基於河豚地穴自適應功能。隨着時間的推移,輪數可以增加以使其變慢,所以儘管計算技術更快,它仍然抵抗暴力攻擊。

所以我的問題是,我如何減慢或加快密碼的有效性檢查?或者換一種說法,我如何設置創建我的哈希密碼所需的默認迭代次數?

+0

'crypt()'函數將不會爲您生成隨機鹽。雖然有一個名爲[password_hash()](http://www.php.net/manual/en/function.password-hash.php)的PHP 5.5的新函數,它將處理所有的東西,並自動生成一個安全鹽。它將在內部調用crypt()函數。使用'password_hash()'代替,早期的PHP版本也有一個[兼容包](https://github.com/ircmaxell/password_compat/blob/master/lib/password.php)。 – martinstoeckli

回答

1

這一切都在documentation。在這種情況下,鹽值必須

「$ 2Y $」,一個兩位數的成本參數,「$」,並從 字母「./0-9A-Za-z」 22個字符。在 salt中使用此範圍之外的字符將導致crypt()返回零長度的字符串。兩位數 成本參數是 基於Blowfish的散列算法計算器的迭代計數的基數2對數,並且必須在範圍 04-31之間,超出此範圍的值將導致crypt()失敗。

所以對於1024(2^10)舍入呼叫應該是

crypt($user_input, "$2y$10$......................"); 

其中每個.表示從法律字母表中的一個字符的鹽。將參數10增加/減少一個,分別使輪數加倍/減半。