2015-01-06 66 views
4

我一直在閱讀關於這個password_hash()的所有類型的論壇和教程,這對於密碼保護似乎很好。PHP中的password_hash()怎麼樣

但現在我想知道,如果它是更好地做出自己的鹽和哈希函數像

$options = [ 
    'cost' => 11, 
    'salt' => mcrypt_create_iv(22, MCRYPT_DEV_URANDOM), 
]; 
password_hash($password, PASSWORD_BCRYPT, $options); 

或者只是讓功能做到這一點:

password_hash($password, PASSWORD_DEFAULT); 

好像有很多關於使用自己的鹽是好還是壞的討論。

有人可以解釋爲什麼它不好(或不)用你自己的鹽?

+4

從[docs](http://php.net/manual/en/function.password-hash.php),「小心 - 強烈建議您不要爲此功能生成自己的鹽。將自動爲您創建一個安全的鹽,如果你沒有指定一個。「文檔中有很多關於自動生成鹽的密碼安全性以及創建自己的問題的評論。 *允許函數創建鹽更安全。 –

+0

謝謝@JayBlanchard – Refilon

回答

3

因爲如果你不創建自己的鹽,它會自動爲你創建一個安全的鹽。

從文檔:

注意

強烈建議您不要生成自己的 此功能的鹽。如果您沒有指定 ,它會自動爲您創建一個安全鹽。

因此,爲了回答你的問題,如果你不知道更多關於鹽或其他......只是不要使用你自己的鹽,這個功能足夠強大!

+0

非常感謝。我也讀過這個,但是想在使用它的網站上做100%的確定。當我可以的時候,我會標記你的答案是正確的。 – Refilon

+0

不客氣;) –

1

鹽只是防止彩虹表攻擊的保護。
它不會讓一個哈希更難打破,而是更大的整體。
如果您爲每個散列使用不同的鹽,攻擊者將需要爲每個密碼創建一個彩虹表。
這是不切實際的工作和時間。
使用pseudorandom-rng生成一個鹽將完成保護整個密碼的工作。
https://crypto.stackexchange.com/questions/1776/can-you-help-me-understand-what-a-cryptographic-salt-is

由於功能已經產生不建議用RNG這實際上是更糟糕的生成自己的安全鹽。
只需讓該功能產生強烈的鹽分,它就會很好,而且成本也較低,因爲您不必自己製造鹽。從以前的鏈接
Correct way of creating salted hash password

報價:

建議您不要通過自己的鹽,而不是讓該函數從操作系統的隨機源創建一個加密的安全鹽。

鹽會包含在生成的哈希值中,因此您不必單獨存儲它。只需在數據庫中創建一個60字符的字符串字段並存儲散列值。函數password_verify()將從存儲的散列值中提取使用的salt。欲瞭解更多信息,你可以看看我的教程有關存儲密碼。