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 相关文章推荐
PHP中::、-&amp;gt;、self、$this几种操作符的区别介绍
Apr 24 PHP
php在window iis的莫名问题的测试方法
May 14 PHP
PHP小技巧之JS和CSS优化工具Minify的使用方法
May 19 PHP
PHP使用CURL模拟登录的方法
Jul 08 PHP
CodeIgniter钩子用法实例详解
Jan 20 PHP
PHP计算数组中值的和与乘积的方法(array_sum与array_product函数)
Apr 01 PHP
php文件上传后端处理小技巧
May 22 PHP
PHP之图片上传类实例代码(加了缩略图)
Jun 30 PHP
PHP图形计数器程序显示网站用户浏览量
Jul 20 PHP
php获取ajax的headers方法与内容实例
Dec 27 PHP
PHP通过curl获取接口URL的数据方法
May 31 PHP
thinkPHP3.2使用RBAC实现权限管理的实现
Aug 27 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
定制404错误页面,并发信给管理员的程序
2006/10/09 PHP
php curl选项列表(超详细)
2013/07/01 PHP
php警告Creating default object from empty value 问题的解决方法
2014/04/02 PHP
php实现singleton()单例模式实例
2014/11/06 PHP
PHP curl模拟登录带验证码的网站
2015/11/30 PHP
PHP不使用内置函数实现字符串转整型的方法示例
2017/07/03 PHP
TP3.2批量上传文件或图片 同名冲突问题的解决方法
2017/08/01 PHP
PHP 实现base64编码文件上传出现问题详解
2020/09/01 PHP
Javascript客户端脚本的设计和应用
2006/08/21 Javascript
Javascript 判断Flash是否加载完成的代码
2010/04/12 Javascript
javascript去掉前后空格的实例
2013/11/07 Javascript
window.onresize 多次触发的解决方法
2013/11/08 Javascript
推荐25个超炫的jQuery网格插件
2014/11/28 Javascript
AngularJS基础 ng-mouseleave 指令详解
2016/08/02 Javascript
jQGrid动态填充select下拉框的选项值(动态填充)
2016/11/28 Javascript
js实现带缓动动画的导航栏效果
2017/01/16 Javascript
MvcPager分页控件 适用于Bootstrap
2017/06/03 Javascript
anime.js 实现带有描边动画效果的复选框(推荐)
2017/12/24 Javascript
vuejs实现递归树型菜单组件
2018/01/13 Javascript
实例详解vue.js浅度监听和深度监听及watch用法
2018/08/16 Javascript
对Python3中的print函数以及与python2的对比分析
2018/05/02 Python
如何使用python实现模拟鼠标点击
2020/01/06 Python
python从PDF中提取数据的示例
2020/10/30 Python
Python 内存管理机制全面分析
2021/01/16 Python
一篇文章带你学习CSS3图片边框
2020/11/04 HTML / CSS
美津浓巴西官方网站:Mizuno巴西
2019/07/24 全球购物
Oracle性能调优原则
2012/05/03 面试题
计算机专业毕业生的自我评价
2013/11/18 职场文书
综合实践教学反思
2014/01/31 职场文书
农村结婚典礼司仪主持词
2014/03/14 职场文书
运动会演讲稿300字
2014/08/25 职场文书
学习焦裕禄观后感
2015/06/09 职场文书
OpenCV中resize函数插值算法的实现过程(五种)
2021/06/05 Python
python单元测试之pytest的使用
2021/06/07 Python
Python卷积神经网络图片分类框架详解分析
2021/11/07 Python
关于对TypeScript泛型参数的默认值理解
2022/07/15 Javascript