注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

梨花寨

 
 
 

日志

 
 
 
 

分享一种用户密码加密方式解析  

2016-10-02 10:27:02|  分类: css |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

function add_user($username, $password, $email) {
$salt = substr(uniqid(rand()), -6);
$password = md5(md5($password).$salt);
$this->db->query("INSERT INTO table_name VALUES ('$username, $password, $email')");
$uid = $this->db->insert_id();
return $uid;
}

$password是用户输入的密码,即$password = $_POST['password'];

$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个字符。

这种存储密码的方式就得到了:用户输入密码md5加密后,在连接上6个随机字符然后md5加密一次。

再看登录的代码:

function check_login($username, $password, &$user) {
$user = $this->get_user_by_username($username);
if(empty($user['username'])) {
return -1;
} elseif($user['password'] != md5(md5($password).$user['salt'])) {
return -2;
}
return $user['uid'];
}



本文来源梨花寨,查看更多技术文章。



简单解析:
$user = $this->get_user_by_username($username);
这句话是根据传入的username来查询数据库(因为用户名是唯一的)。获取user的数组。

下面判断,如果得到的数组$user中的$user['username'])用户名字段为空的话,就返回-1,如果$user数组里面的$user['password'] 不等于md5(md5($password).$user['salt'])则返回-2

从这里看md5(md5($password).$user['salt']),就是把传入的密码md5加密一次,在连接$user数组中的$user['salt']字段,再进行一次md5加密。这个与插入用户的时候密码加密方式是相同的,只是这里的用户输入的密码经过md5加密后,再连接的,是从数据库中查到的对应的字符。


  评论这张
 
阅读(0)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018