2012-06-24 58 views
6

我正在註冊表單上,我需要加密密碼,我聽說它是​​建議我使用Blowfish加密的密碼,你如何實現使用PHP的blowfish加密crypt()函數?另外,我打算以後找回密碼登錄。使用Blowfish與PHP加密

+0

看看[this](http://www.chilkatsoft.com/p/php_blowfish.asp)。 –

+1

您不應「加密」密碼,而應使用單向散列函數。請參閱:[如何在PHP中使用bcrypt進行散列密碼?](http://stackoverflow.com/q/4795385/911182) – Herbert

+0

另請閱讀:[如何安全地存儲我的用戶密碼?](http:/ /stackoverflow.com/questions/1581610/how-can-i-store-my-users-passwords-safely/1581919#1581919) – Jacco

回答

6

簡短的回答是使用crypt與鹽以字符開始$ 2A $,一個兩位數成本參數,$,和來自字母表的22位數字./0-9A-Za-z。這隻適用於支持Blowfish加密算法的系統。但是,PHP 5.3本地實現了它。有關更多詳細信息,請參閱PHP manual — crypt

實施例:

crypt('rasmuslerdorf', '$2a$07$somesillystringforsalt') 

鹽串觸發適當的算法。兩位數代價參數是基礎Blowfish散列算法的迭代計數的基數爲2的對數,並且必須在範圍內[04 – 31]。在示例中,07告訴算法使用2個或多個迭代128個。這個數字越高,執行BUT所需的時間越長,在散列用戶密碼的情況下,這是一個GOOD的事情。

This answer to a similar question更詳細地解釋了BCrypt是什麼,它與Blowfish的關係以及爲什麼你應該使用它。還有許多其他related topics here on Stack Overflow


phpass是一個很好的,易於使用的密碼哈希框架,在所有系統上的工作原理,使用河豚如果支持它’ S,並回落至其它的算法,如果它’不是。

4

你不應該需要河豚來加密這樣的密碼。註冊表格應該通過HTTPS,該HTTPS將處理針對攻擊者的防線。它自己的密碼應該被散列(永不加密)。 bcrypt是一個基於河豚的好密碼哈希函數。但是有很多帖子與SO上的安全密碼存儲相關。

+1

+1我可能應該提到HTTPS。 – Herbert

+0

[Heartbleed漏洞](http://heartbleed.com/)之後,我想沒有什麼是完全安全的。 – ontananza