php用户密码加密算法分析【Discuz加密算法】


Posted in PHP onOctober 12, 2016

本文实例讲述了php用户密码加密算法。分享给大家供大家参考,具体如下:

今天在拿Discuz进行二次开发时需要在代码里验证Discuz的用户名密码,结果不小心掉进了坑里,因为Discuz的论坛有两张表来存储用户数据,一张在Discuz的数据库ultrax里面的pre_common_member里面,另一个是存储在了UCenter的数据库ucenter的uc_members表里。花了很大功夫在研究ultrax库里那张pre_common_member的数据,研究它的密码是如何生成的,结果搜了一下发现网上说是随机生成的一个salt

心想这随机生成的salt如何在登录时进行验证呢?然后网上说其实Discuz压根就没用那个密码,自己试验了一下,果真如此,即使把pre_common_member里面的用户密码改掉,照样能够正常登录,看来这个密码压根就没用,害我绕了一个大圈子。

好了,进入正题,Discuz的密码加密算法其实就是两次MD5加密,首先用明文进行一次加密,之后随机生成一个salt,再把第一次的密文后面添加salt作为明文再进行一次MD5加密。salt保存在uc_members表里,可以通过用户名进行获取。

像这样:

MD5(MD5(明文)+salt)

下面是.net的实现代码:

string GetDiscuzPWString(string sourceStr, string salt)
{
   return GetMd5Hash(string.Concat(GetMd5Hash(sourceStr),salt));
}
string GetMd5Hash(string input)
{
  MD5 md5Hasher = MD5.Create();
  byte[] data = md5Hasher.ComputeHash(Encoding.Default.GetBytes(input));
  StringBuilder sBuilder = new StringBuilder();
  for (int i = 0; i < data.Length; i++)
  {
    sBuilder.Append(data[i].ToString("x2"));
  }
  return sBuilder.ToString();
}

总结密码判断方式:

① 要安装UC

② 打开数据库找到uc_members 这表,寻找最后一个字段"salt ",复制里面的值

③ 伪代码:

$s=md5(md5("密码")."salt字段的值");
echo $s;

④ 用IF判断

⑤ 再说一次!那个随机是6位数!

PHP 相关文章推荐
让你同时上传 1000 个文件 (一)
Oct 09 PHP
php &amp;&amp; 逻辑与运算符使用说明
Mar 04 PHP
php设计模式 Proxy (代理模式)
Jun 26 PHP
php ci框架中加载css和js文件失败的原因及解决方法
Jul 29 PHP
ThinkPHP模板输出display用法分析
Nov 26 PHP
ThinkPHP自定义Redis处理SESSION的实现方法
May 16 PHP
PHP Filter过滤器全面解析
Aug 09 PHP
php微信开发自定义菜单
Aug 27 PHP
php版微信公众平台回复中文出现乱码问题的解决方法
Sep 22 PHP
php实现解析xml并生成sql语句的方法
Feb 03 PHP
在Laravel5.6中使用Swoole的协程数据库查询
Jun 15 PHP
Yii1.1框架实现PHP极光推送消息通知功能
Sep 06 PHP
基于php实现的php代码加密解密类完整实例
Oct 12 #PHP
php fseek函数读取大文件两种方法
Oct 12 #PHP
PHP从二维数组得到N层分类树的实现代码
Oct 11 #PHP
php 无限分类 树形数据格式化代码
Oct 11 #PHP
PHP简单判断iPhone、iPad、Android及PC设备的方法
Oct 11 #PHP
PHP中SERIALIZE和JSON的序列化与反序列化操作区别分析
Oct 11 #PHP
php外部执行命令函数用法小结
Oct 11 #PHP
You might like
PHP字符串处理的10个简单方法
2010/06/30 PHP
php下统计用户在线时间的一种尝试
2010/08/26 PHP
ThinkPHP之R方法实例详解
2014/06/20 PHP
PHP用mysql_insert_id()函数获得刚插入数据或当前发布文章的ID
2016/11/25 PHP
thinkphp3.2嵌入百度编辑器ueditor的实例代码
2017/07/13 PHP
PHP大文件分割上传 PHP分片上传
2017/08/28 PHP
PHP使用JpGraph绘制折线图操作示例【附源码下载】
2019/10/18 PHP
javascript实现的listview效果
2007/04/28 Javascript
js电信网通双线自动选择技巧
2008/11/18 Javascript
浅析js封装和作用域
2013/07/09 Javascript
javascript中的__defineGetter__和__defineSetter__介绍
2014/08/15 Javascript
javascript cookie的简单应用
2016/02/24 Javascript
jquery if条件语句的写法
2016/05/19 Javascript
JQuery异步加载PartialView的方法
2016/06/07 Javascript
如何使用vuejs实现更好的Form validation?
2017/04/07 Javascript
bootstrap switch开关组件使用方法详解
2017/08/22 Javascript
利用ECharts.js画K线图的方法示例
2018/01/10 Javascript
Angular如何在应用初始化时运行代码详解
2018/06/11 Javascript
jquery中为什么能用$操作
2019/06/18 jQuery
TensorFlow.js 微信小程序插件开始支持模型缓存的方法
2020/02/21 Javascript
解决vue动态下拉菜单 有数据未反应的问题
2020/08/06 Javascript
[01:07:19]2018DOTA2亚洲邀请赛 4.5 淘汰赛 Mineski vs VG 第一场
2018/04/06 DOTA
[43:32]Winstrike vs VGJ.S 2018国际邀请赛淘汰赛BO3 第一场 8.23
2018/08/24 DOTA
python中正则表达式的使用详解
2014/10/17 Python
python有证书的加密解密实现方法
2014/11/19 Python
正确理解Python中if __name__ == '__main__'
2019/01/24 Python
Python3 虚拟开发环境搭建过程(图文详解)
2020/01/06 Python
Python yield的用法实例分析
2020/03/06 Python
世界上最伟大的马产品:Equiderma
2020/01/07 全球购物
软件测试常见笔试题
2012/02/04 面试题
一道Delphi上机题
2012/06/04 面试题
《乞巧》教学反思
2014/02/27 职场文书
经济职业学院毕业生自荐书
2014/03/17 职场文书
电子专业自荐信
2014/07/01 职场文书
读后感作文评语
2014/12/25 职场文书
Python基础之教你怎么在M1系统上使用pandas
2021/05/08 Python