密碼雜湊函式
在 PHP 5.5 之前,你可以使用相容包來提供 password_*
功能。如果能夠這樣做,強烈建議你使用相容包。
無論有沒有相容包,通過 crypt()
正確的 Bcrypt 功能都依賴於 PHP 5.3.7+, 否則你必須將密碼限制為僅限 ASCII 的字符集。
注意: 如果你使用 PHP 5.5 或更低版本,則使用不受支援的 PHP 版本,該版本不再接收任何安全更新。儘快更新,之後可以更新密碼雜湊值。
演算法選擇
安全演算法
- **** 只要你使用鍵拉伸來增加雜湊計算時間, bcrypt 就是你的最佳選擇,因為它會使暴力攻擊極其緩慢 。
- argon2 是另一個選項,將在 PHP 7.2 中提供 。
不安全的演算法
以下雜湊演算法不安全或不適合用途,因此不應使用。它們從不適合密碼雜湊,因為它們是為快速摘要而設計的,而不是緩慢而難以強制密碼雜湊。
如果你使用其中任何一個,甚至包括鹽,你應該切換到推薦的安全演算法之一**,儘快**。
演算法被認為是不安全的:
- MD4 - 1995 年發現的碰撞攻擊
- MD5 - 2005 年發現的碰撞攻擊
- SHA-1 - 2015 年發生的碰撞襲擊
有些演算法可以安全地用作訊息摘要演算法來證明真實性,但絕不能用作密碼雜湊演算法 :
- SHA-2
- SHA-3
注意,強大的雜湊值如 SHA256 和 SHA512 是完整且穩健的,但是使用 bcrypt 或 argon2 雜湊函式通常更安全,因為對這些演算法的暴力攻擊對於經典計算機來說要困難得多。