discuz用户密码加密方式解析及忘记密码的解决办法
,首先找到文件:uc_client/model/user.php, ,里面有一个函数:, ,[代码]php代码:,function add_user($username, $password, $email, $uid=0, $questionid=”, $answer=”, $regip=”) { $regip=empty($regip) ? $this->base->onlineip : $regip; $salt=substr(uniqid(rand()), -6); $password=md5(md5($password).$salt); $sqladd=$uid ? “uid='”.intval($uid).”‘,” : ”; $sqladd .=$questionid > 0 ? “secques='”.$this->quescrypt($questionid, $answer).”‘,” : “secques=”,”; $this->db->query(“INSERT INTO “.UC_DBTABLEPRE.”members SET $sqladd username=’$username’, password=’$password’, email=’$email’, regip=’$regip’, regdate='”.$this->base->time.”‘, salt=’$salt'”); $uid=$this->db->insert_id(); $this->db->query(“INSERT INTO “.UC_DBTABLEPRE.”memberfields SET uid=’$uid'”); return $uid; }, , ,这个是添加用户到ucenter中的方法,注意里面这句话:, ,$password=md5(md5($password).$salt);, ,这里可以看到存储到数据库中的用户密码的加密方式:, ,表中的密码等于:用户输入的密码经过md5加密,后面跟上一段字符串$salt之后,再md5加密一次。, ,$salt这段字符串哪来的呢?, ,看紧挨着上面的一段代码:$salt=substr(uniqid(rand()), -6);, ,解开了说,rand(),是一段随机数,位数也不确定。, ,uniqid(),是 基于以微秒计的当前时间,生成一个唯一的 ID。, ,可以再php里面运行这句话:echo uniqid(rand());, ,能够得到一段数字与字母的组合的数字。, ,substr是一段php截取字符串的方法。, ,substr(uniqid(rand()), -6);可以分析为从后面往前截取6个字符。, ,那么discuz存储密码的方式就得到了:用户输入密码md5加密后,在连接上6个随机字符然后md5加密一次。, 首先找到文件:uc_client/model/user.php 里面有一个函数: [代码]php代码: function add_user($username, $password, $email, $uid=0, $questionid=”, $answer=”, $regip=”) { $regip=empty($regip) ? $this->base->onlineip : $regip; $salt=substr(uniqid(rand()), -6); $password=md5(md5($password).$salt); $sqladd=$uid ? “uid='”.intval($uid).”‘,” : ”; $sqladd .=$questionid > 0 ? “secques='”.$this->quescrypt($questionid, $answer).”‘,” : “secques=”,”; $this->db->query(“INSERT INTO “.UC_DBTABLEPRE.”members SET $sqladd username=’$username’, password=’$password’, email=’$email’, regip=’$regip’, regdate='”.$this->base->time.”‘, salt=’$salt'”); $uid=$this->db->insert_id(); $this->db->query(“INSERT INTO “.UC_DBTABLEPRE.”memberfields SET uid=’$uid'”); return $uid; } 这个是添加用户到ucenter中的方法,注意里面这句话: $password=md5(md5($password).$salt); 这里可以看到存储到数据库中的用户密码的加密方式: 表中的密码等于:用户输入的密码经过md5加密,后面跟上一段字符串$salt之后,再md5加密一次。 $salt这段字符串哪来的呢? 看紧挨着上面的一段代码:$salt=substr(uniqid(rand()), -6); 解开了说,rand(),是一段随机数,位数也不确定。 uniqid(),是 基于以微秒计的当前时间,生成一个唯一的 ID。 可以再php里面运行这句话:echo uniqid(rand()); 能够得到一段数字与字母的组合的数字。 substr是一段php截取字符串的方法。 substr(uniqid(rand()), -6);可以分析为从后面往前截取6个字符。 那么discuz存储密码的方式就得到了:用户输入密码md5加密后,在连接上6个随机字符然后md5加密一次。
标签:discuz加密密码解决办法解析
上一篇
discuz发帖提示:为避免您的帐号被盗用,请您绑定QQ帐号后发帖解决方法
下一篇
discuz允许游客表态的方法
时间:(2024-02-07 14:05:21)
本站资源均来自互联网或会员发布,如果不小心侵犯了您的权益请与我们联系。我们将立即删除!谢谢!