2013-04-15 42 views
4

爲什麼PHP中的CRYPT_BLOWFISH被認爲比密碼哈希更好,當它產生比CRYPT_SHA-256/512短的哈希?難道不可能找到另一個計算相同BLOWFISH哈希的詞,而不是SHA256/512哈希?從php.net手動拍攝爲什麼PHP中的CRYPT_BLOWFISH被認爲是更好的,當它產生比SHA更短的哈希

例哈希:

Blowfish: $2a$07$usesomesillystringfore2uDLvp1Ii2e./U9C8sBjqp8I90dH6hi 
SHA-256: $5$rounds=5000$usesomesillystri$KqJWpanXZHKq2BOB43TSaYhEWsQ1Lr5QNyPCDH/Tp.6 
SHA-512: $6$rounds=5000$usesomesillystri$D4IrlXatmP7rx3P3InaxBeoomnAihCKRVQP22JZ6EY47Wc6BkroIuUUBOov1i.S5KPgErtP/EN5mcO.ChWQW21 
+2

因爲它是一個非常慢的算法。這就是你想要的密碼哈希。 – PeeHaa

回答

2

事情與bcrypt,使得它的安全是它的慢得多計算比任何其他算法。

隨着什麼SHA版本,你可以得到更好的電腦,你將能夠在任何時間製作彩虹表。對於bcrypt,它仍然需要很長時間,這個算法花費時間。因此幾乎不可能從哈希中檢索原始密碼。

你可以看到這個link for more information。 您也可以從安全StackExchange中看到this thread,它涵蓋了它!


的事實,散列產生更小,以及它並沒有真正的問題,因爲在所有正如我所說,如果你想從中找到密碼確實哈希從何而來,它需要年齡。

參見this sandbox。只需將負載因數設置爲15以上就可以執行超過3秒的時間。嘗試使用它,你會明白爲什麼它是安全的。

代碼在沙箱中:

$time = microtime(true); 
$pass = crypt('myNewPassword', '$2y$15$usesomesillystringforsalt$'); 
$end_time = microtime(true); 

$diff = $end_time - $time; 
echo "$pass\n$diff" 

輸出繼電器:

$ 2Y $ 15 $ usesomesillystringforeTfp6/FuUgyb1HKFA36V9tf6Go5xlv/A
2.4688489437103

它需要2.5秒,1個散列!想象一下,試圖散列數百萬個密碼!

相關問題