CMS教程

当前位置:首页 > CMS教程 >

discuz用户密码加密方式解析

时间:2015-07-31        阅读:次        QQ群:182913345

首先找到文件:uc_client/model/user.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加密一次。
 
查看数据库表格:pre_ucenter_members 的表结构,里面有一个 salt 字段,这个字段即是后面跟的那个随机数。即当插入用户的时候,生成的那个随机数。而且用户登陆的时候,验证用的随机数,也是这个。

上一篇:织梦发布文章提示“标题不能为空”的解决方法

下一篇:织梦CMS提示DedeTag Engine Create File False错误

扫一扫,更多精彩内容推送

PHP技术分享

分享PHP技术,前端技术,数据库,SEO优化,服务器,网络安全等知识,是php程序员工作学习的好帮手!

Copyright © 2013-2015.PHP技术分享 www.php520.cn  版权所有  网站地图    PHP学习交流群

免责声明:网站内容收集于互联网,本网站不承担任何由于内容的合法性及健康性所引起的争议和法律责任。

欢迎大家对网站内容侵犯版权等不合法和不健康行为进行监督和举报。 沪ICP备15014499号-2