给MD5加上salt随机盐值加密算法实现密码安全的php实现

给MD5加上salt随机盐值加密算法实现密码安全的php实现

如果直接对密码进行散列,那么黑客可以对通过获得这个密码散列值,然后通过查散列值字典(例如MD5密码破解网站),得到某用户的密码。
加上salt后就会难上很多可以一定程度上解决问题,即便是黑客获得了其中的salt和最终密文,破解也是相当麻烦的。

PS: 一般都是加密后的数据再存入到数据库的,安全的数据是不可逆的,即数据库里面的数据即使你知道他是通过md5,加盐md5,base64等算法加密进去的也不可直接反推出内容,一般是通过输入的内容加上加密算法后得出的跟数据库里面对比。很多破解是用社工库进行撞库对比,你的帐号密码在其他不安全网站给破解后拿来到其他网站尝试撞库。

如何加点盐(salt)?
为了加强MD5的安全性加入了新的算法部分即加盐值,然后散列,再比较散列值,已确定密码是否正确。
加盐值是随机生成的一组字符串,可以包括随机的大小写字母、数字、字符,位数可以根据要求而不一样,使用不同的加盐值产生的最终密文是不一样的:
1).得到明文的值
2).进行计算获取MD5明文hash值
3).随机生成加盐值并插入
4).MD5插入加盐值得到的hash
5).得到最终的密文

看一个简单的加salt函数:
function do_hash($psw) {
$salt = 'aFXBxYmkClsw46y7b8C5qN56zs'; //定义一个salt值,最好够长,或者随机
return md5($psw,$salt); //返回加salt后的散列
}

注意:如果你是随机生成salt值就得放入数据库,不要用time()时间戳,避免被枚举破解,简单点可以配置一个固定salt值,如上。

一种复杂点加密方法:
function passCrypt($psw)
{
  $psw=md5($psw);
  $salt=substr($psw,-1,3);
  $psw=crypt($psw,$salt);
  return $psw;
}
先把密码用MD5加密,然后截取其结果的一段,再用crypt加密,这两个加密函数都是单向的,而且加密后的最终密码是13位的,无论谁拿到手都不知道该怎么破解了,在密码验证时只需要将原始密码用加密函数再加密一遍进行匹配就行了。

上一篇:[转载]介绍一个JSONP 跨域访问代理API-yahooapis


下一篇:geotrellis使用(四)geotrellis数据处理部分细节