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 相关文章推荐
Discuz!5的PHP代码高亮显示插件(黑暗中的舞者更新)
Jan 29 PHP
php at(@)符号的用法简介
Jul 11 PHP
PHP遍历数组的几种方法
Mar 22 PHP
用php简单实现加减乘除计算器
Jan 06 PHP
ThinkPHP中公共函数路径和配置项路径的映射分析
Nov 22 PHP
Smarty中的注释和截断功能介绍
Apr 09 PHP
浅析PHP中的i++与++i的区别及效率
Jun 15 PHP
PHP购物车类Cart.class.php定义与用法示例
Jul 20 PHP
PHP实现路由映射到指定控制器
Aug 13 PHP
swoole和websocket简单聊天室开发
Nov 18 PHP
PHP+redis实现微博的推模型案例分析
Jul 10 PHP
PHPstorm激活码2020年5月13日亲测有效
Sep 17 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去除HTML标签实例
2013/11/06 PHP
PHP数组相关函数汇总
2015/03/24 PHP
Zend Framework生成验证码并实现验证码验证功能(附demo源码下载)
2016/03/22 PHP
JavaScript 存在陷阱 删除某一区域所有节点
2010/05/10 Javascript
在js中判断checkboxlist(.net控件客户端id)是否有选中
2013/04/11 Javascript
node.js中的console.warn方法使用说明
2014/12/09 Javascript
jQuery使用hide方法隐藏页面上指定元素的方法
2015/03/30 Javascript
javascript笛卡尔积算法实现方法
2015/04/08 Javascript
基于JavaScript实现熔岩灯效果导航菜单
2017/01/04 Javascript
全选复选框JavaScript编写小结(附代码)
2017/08/16 Javascript
web前端vue filter 过滤器
2018/01/12 Javascript
vue.js前后端数据交互之提交数据操作详解
2018/04/24 Javascript
vue项目部署上线遇到的问题及解决方法
2018/06/10 Javascript
webuploader实现上传图片到服务器功能
2018/08/16 Javascript
记React connect的几种写法(小结)
2018/09/18 Javascript
JavaScript模板引擎实现原理实例详解
2018/12/14 Javascript
vue新建项目并配置标准路由过程解析
2019/12/09 Javascript
Vue关于组件化开发知识点详解
2020/05/13 Javascript
vue使用vant中的checkbox实现全选功能
2020/11/17 Vue.js
python生成圆形图片的方法
2020/03/25 Python
pyqt5中QThread在使用时出现重复emit的实例
2019/06/21 Python
Python3 合并二叉树的实现
2019/09/30 Python
Django实现文件上传和下载功能
2019/10/06 Python
python装饰器使用实例详解
2019/12/14 Python
Python类中self参数用法详解
2020/02/13 Python
python实现堆排序的实例讲解
2020/02/21 Python
解决python Jupyter不能导入外部包问题
2020/04/15 Python
HTML5中input输入框默认提示文字向左向右移动的示例代码
2020/09/10 HTML / CSS
先进党支部事迹材料
2014/01/13 职场文书
学生拾金不昧表扬信
2014/01/21 职场文书
教育合作协议范本
2014/10/17 职场文书
离婚承诺书格式范文
2015/05/04 职场文书
2016年小学植树节活动总结
2016/03/16 职场文书
Vue如何实现组件间通信
2021/05/15 Vue.js
Navicat for MySQL的使用教程详解
2021/05/27 MySQL
MySQL中rank() over、dense_rank() over、row_number() over用法介绍
2022/03/23 MySQL