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 相关文章推荐
玩转虚拟域名◎+ .
Oct 09 PHP
jQuery 源码分析笔记
May 25 PHP
解析php多线程下载远程多个文件
Jun 25 PHP
php自定义session示例分享
Apr 22 PHP
30个php操作redis常用方法代码例子
Jul 05 PHP
Codeigniter框架实现获取分页数据和总条数的方法
Dec 05 PHP
CI(CodeIgniter)模型用法实例分析
Jan 20 PHP
PHP使用redis消息队列发布微博的方法示例
Jun 22 PHP
PHP实现的字符串匹配算法示例【sunday算法】
Dec 19 PHP
PHP+MariaDB数据库操作基本技巧备忘总结
May 21 PHP
php探针不显示内存解决方法
Sep 17 PHP
ThinkPHP 5 AJAX跨域请求头设置实现过程解析
Oct 28 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调用Twitter的RSS的实现代码
2010/03/10 PHP
PHP无限分类(树形类)
2013/09/28 PHP
PHP动态生成javascript文件的2个例子
2014/04/11 PHP
PHP中ltrim与rtrim去除左右空格及特殊字符实例
2016/01/07 PHP
关于php中一些字符串总结
2016/05/05 PHP
PHP实现类似题库抽题效果
2018/08/16 PHP
PHP反射原理与用法深入分析
2019/09/28 PHP
Laravel 自动生成验证的实例讲解:login / logout
2019/10/14 PHP
laravel5.6实现数值转换
2019/10/23 PHP
PHP的图像处理实例小结【文字水印、图片水印、压缩图像等】
2019/12/20 PHP
Javascript 类、命名空间、代码组织代码
2011/07/31 Javascript
javascript学习笔记(二)数组和对象部分
2014/09/30 Javascript
jQuery中on()方法用法实例详解
2015/02/06 Javascript
微信小程序 监听手势滑动切换页面实例详解
2017/06/15 Javascript
Layui给switch添加响应事件的例子
2019/09/03 Javascript
layer.js open 隐藏滚动条的例子
2019/09/05 Javascript
JavaScript交换变量的常用方法小结【4种方法】
2020/05/07 Javascript
js轮播图之旋转木马效果
2020/10/13 Javascript
python分割和拼接字符串
2013/11/01 Python
解决python写的windows服务不能启动的问题
2014/04/15 Python
python调用新浪微博API项目实践
2014/07/28 Python
Python实现字符串反转的常用方法分析【4种方法】
2017/09/30 Python
python实现读取excel写入mysql的小工具详解
2017/11/20 Python
Python实现读取txt文件并转换为excel的方法示例
2018/05/17 Python
python3实现163邮箱SMTP发送邮件
2018/05/22 Python
Python当中的array数组对象实例详解
2019/06/12 Python
罗德与泰勒百货官网:Lord & Taylor
2016/08/12 全球购物
西班牙国家航空官方网站:Iberia
2017/11/16 全球购物
MCAKE蛋糕官方网站:一直都是巴黎的味道
2018/02/06 全球购物
int和Integer有什么区别
2013/05/25 面试题
我们没有写servlet的构造方法,那么容器是怎么创建servlet的实例呢
2013/04/24 面试题
制药工程专业应届生求职信
2013/09/24 职场文书
外语学院毕业生的自我鉴定
2013/11/28 职场文书
企业消防安全制度
2014/02/02 职场文书
旅游局领导班子“四风”问题对照检查材料思想汇报
2014/09/29 职场文书
省级三好学生主要事迹材料
2015/11/03 职场文书