php的哈希函數


哈希函數:

echo password_hash("rasmuslerdorf", PASSWORD_DEFAULT)."\n";

驗證函數:

boolean password_verify ( string $password , string $hash )

比如

if (password_verify('rasmuslerdorf', $hash)) {
    echo 'Password is valid!';
} else {
    echo 'Invalid password.';
}

ci框架的手冊里有這樣一段話:

在你的應用程序中正確處理密碼是非常關鍵的。

但是不幸的是,許多開發者並不知道怎么去做,而且網絡上充斥着大量過時的 甚至錯誤的建議,提供不了任何幫助。

我們提供了一個清單來幫助你,告訴你什么該做,什么不該做。

絕不要以明文存儲密碼。

永遠使用 哈希算法 來處理密碼。
絕不要使用 Base64 或其他編碼方式來存儲密碼。

這和以明文存儲密碼是一樣的,使用 哈希 ,而不要使用 編碼 。

編碼以及加密,都是雙向的過程,而密碼是保密的,應該只被它的所有者知道, 這個過程必須是單向的。哈希正是用於做這個的,從來沒有解哈希這種說法, 但是編碼就存在解碼,加密就存在解密。
絕不要使用弱哈希或已被破解的哈希算法,像 MD5 或 SHA1 。 這些算法太老了,而且被證明存在缺陷,它們一開始就並不是為了保存密碼而設計的。 另外,絕不要自己發明算法。 只使用強密碼哈希算法,例如 BCrypt ,在 PHP 自己的 密碼哈希 函數中也是使用它。 即使你的 PHP 版本不是 5.5+ ,也請使用它們,CodeIgniter 為你提供了這些算法。 如果你連升級 PHP 也無法做到,那么使用 hash_pbkdf() <http://php.net/hash_pbkdf2> 吧, 為實現兼容性我們提供了這個函數。 絕不要以明文形式顯示或發送密碼。 即使是對密碼的所有者也應該這樣。如果你需要 "忘記密碼" 的功能,可以隨機生成一個新的 一次性的(這點很重要)密碼,然后把這個密碼發送給用戶。 絕不要對用戶的密碼做一些沒必要的限制。 如果你使用除 BCrypt(它有最多 72 字符的限制)之外的其他哈希算法,你應該設置一個相對長一點的密碼長度(例如 1024 字符),這樣可以緩解 DoS 攻擊。 但是除此之外,對密碼的其他限制諸如密碼中只允許使用某些字符,或者密碼中不允許包含某些字符,就沒有任何意義了。 這樣做不僅不會提高安全性,反而 降低了 安全性,而且真的沒有任何理由需要這樣做。 只要你對密碼進行哈希處理了,那么無論是技術上,還是在存儲上都沒有任何限制。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM