md5 php 漏洞,PHP实现MD5密码加盐处理

为了系统安全,大多密码都使用MD5加密处理,md5方式相对安全,但相同的密码MD5值也是相同的,加盐处理后可以生成相同密码而MD5值不同。不多说,直接上图(参考PHPCMS密码加密处理)

数据库如下:

28ecafdb477d9a4c83763b1c21e25800.png

其中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"加密字段值+提交的密码反查,获取新的密码匹配数据库的密码,匹配相同即可正确登录。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值