为了系统安全,大多密码都使用MD5加密处理,md5方式相对安全,但相同的密码MD5值也是相同的,加盐处理后可以生成相同密码而MD5值不同。不多说,直接上图(参考PHPCMS密码加密处理)
数据库如下:
其中admin和xiaozhang的密码都是123456,但值不同,是因为加了一组生成随机数的"encrypt"加密字段。
代码如下:
/**
* 对用户的密码进行加密
* @param $password
* @param $encrypt //传入加密串,在修改密码时做认证
* @return array/password
*/
function password($password, $encrypt='') {
$pwd = array();
$pwd['encrypt'] = $encrypt ? $encrypt : create_randomstr();
$pwd['password'] = md5(md5(trim($password)).$pwd['encrypt']);
return $encrypt ? $pwd['password'] : $pwd;
}
/**
* 生成随机字符串
* @param string $lenth 长度
* @return string 字符串
*/
function create_randomstr($length=6) {
$chars = '123456789abcdefghijklmnpqrstuvwxyzABCDEFGHIJKLMNPQRSTUVWXYZ';
$hash = '';
$max = strlen($chars) - 1;
mt_srand();
for($i = 0; $i < $length; $i++) {
$hash .= $chars[mt_rand(0, $max)];
}
return $hash;
}
注:方法
当调用password方法时,就可以返回密码和加密值(加盐值)。这样就能实现相对安全的登录密码了。
用户登录的时候只需查找username相同的数据,拿到数据库里的"encrypt"加密字段值+提交的密码反查,获取新的密码匹配数据库的密码,匹配相同即可正确登录。