PHP程序员:6年前我就告诉过你md5密码不安全,今天你还在犯错误并生成一个独特的散列算法。但是你应该多多少少听说过,md5已经不安全了!PHP5.5中有一些密码验证替代方案,即sha1、password_hash?为什么它被认为更安全?应该如何选择?研究时间很多研究论文已经证明之后,md5计算出的hash值是可以逆向的。我们也应该完全停止使用它。论文的名字也是很有冲击力的《How to Break MD5 and Other Hash Functions》,演示了整个逆向过程,可谓是震撼人心,看的我心惊肉跳。作为升级版,password_hash函数的安全系数足够强,可以抵抗一段时间的破解。在PHP5.5中使用是安全的。后来加入标准库的crypt函数使安全级别向前迈进了一大步。首先说明一下password_hash的用法:$options=['cost'=>12,];echopassword_hash("rasmuslerdorf",PASSWORD_BCRYPT,$options)."\n";并使用BLOWFISH算法生成加密密码:if(CRYPT_BLOWFISH==1){echo'Blowfish:'.crypt('rasmuslerdorf','$2a$07$usesomesillystringforsalt$')."\n";}同样,PHP已准备好函数,而且使用极其简单高效,等待开发者开箱即用。更进一步,为什么md5不能用了呢?因为MD5、SHA1和SHA256等哈希算法被设计为非常快速和高效。随着现代技术和计算机设备的出现,“暴力破解”所需的时间越来越短。由于现代计算机可以“逆转”这些散列算法的速度,许多安全专家强烈建议不要将它们用于密码散列。为什么PHP5.5推荐使用password_hash函数?散列密码时最重要的两个考虑因素是计算和成本。哈希算法的计算成本越高,暴力破解它所需的时间就越长。PHP5.5提供了一个本机密码散列APIpassword_hash(),它可以安全可靠地处理散列和验证密码。写在最后,计算机硬件的飞速发展,大大缩短了原本需要大量时间和成本的破解工作周期。在软件层面,一定要跟上节奏,才能保证一段时间内的安全。而且PHP提供的功能如此高效简单,何乐而不为呢!
