PHP程序員:6年前都告訴過你md5密碼不安全,直到今天你還在犯錯
引言
作為php開發人員,很長一段時間以來,很多人一直在使用md5哈希算法來保護密碼數據并生成唯一的哈希算法。但是你應該或多或少聽到過,md5不再安全了!
PHP 5.5中有一些密碼身份驗證替代方案,即 sha1,password_hash?為什么被認為更安全?應該怎么選擇?

學習時間
很多研究論文已經證明過了,md5 計算出的哈希值可以被逆向。我們也應該完全停止使用。論文的名字也非常具有沖擊力《How to Break MD5 and Other Hash Functions》,演示了整個逆向的過程,可謂觸目驚心,看的我瑟瑟發抖。
作為升級版的用法,password_hash 函數安全系數足夠強大到抵御一段時間的破解。在 PHP 5.5 中可以放心使用。后來加入到標準庫中的 crypt 函數,則把安全級別向前推進了一大步。
首先舉例說明一下 password_hash 的用法:
- $options = [
- 'cost' => 12,
- ];
- echo password_hash("rasmuslerdorf", PASSWORD_BCRYPT, $options)."\n";
還有使用 BLOWFISH 算法的 crypt 密碼生成:
- if (CRYPT_BLOWFISH == 1) {
- echo 'Blowfish: ' . crypt('rasmuslerdorf', '$2a$07$usesomesillystringforsalt$') . "\n";
- }
還是那句話,PHP 都準備好函數了,用法極為簡單高效,等著開發者開箱即用呢。
深入一步
為什么堅決不能再用 md5 了?
因為諸如MD5,SHA1和SHA256之類的哈希算法被設計為非常快速和高效。隨著現代技術和計算機設備的出現,“暴力破解”所需要的時間越來越短。由于現代計算機“逆向”這些哈希算法的速度很快,因此許多安全專業人員強烈建議不要將其用于密碼哈希。
為什么 PHP 5.5 中推薦使用 password_hash 函數?
在對密碼進行哈希處理時,兩個最重要的考慮因素是計算量和費用。哈希算法在計算上越昂貴,對它進行暴力破解所花費的時間就越長。PHP 5.5提供了一個本機密碼哈希API,就是password_hash(),可以安全地安全處理哈希和驗證密碼。
寫在最后
計算機硬件的突飛猛進,使得原本需要大量的時間和成本才能進行的破解工作周期大為縮短。在軟件層面,我們勢必要跟得上節奏,才能保證在一段時間內的安全。
再者,PHP 提供的函數如此高效,簡單,有什么理由不用呢!