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_MySQL教程-第一天
Mar 18 PHP
PHP生成月历代码
Jun 14 PHP
PHP 基于Yii框架中使用smarty模板的方法详解
Jun 13 PHP
php 批量添加多行文本框textarea一行一个
Jun 03 PHP
php实现的美国50个州选择列表实例
Apr 20 PHP
PHP实现的浏览器检查类
Apr 11 PHP
PHP构造二叉树算法示例
Jun 21 PHP
在云虚拟主机部署thinkphp5项目的步骤详解
Dec 21 PHP
php文件操作之文件写入字符串、数组的方法分析
Apr 15 PHP
Laravel框架源码解析之入口文件原理分析
May 14 PHP
Swoole源码中如何查询Websocket的连接问题详解
Aug 30 PHP
php使用event扩展的io复用测试的示例
Oct 20 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生成月历代码
2007/06/14 PHP
php判断输入不超过mysql的varchar字段的长度范围
2011/06/24 PHP
几种有用的变型 PHP中循环语句的用法介绍
2012/01/30 PHP
PHP内置的Math函数效率测试
2014/12/01 PHP
ThinkPHP通过AJAX返回JSON的两种实现方法
2014/12/18 PHP
Adnroid 微信内置浏览器清除缓存
2016/07/11 PHP
PHP回调函数与匿名函数实例详解
2017/08/16 PHP
javascript 写类方式之三
2009/07/05 Javascript
子页向父页传值示例
2013/11/27 Javascript
js转化毫秒为时间格式代码
2014/04/10 Javascript
jQuery中:disabled选择器用法实例
2015/01/04 Javascript
javascript中数组和字符串的方法对比
2016/07/20 Javascript
js 数据存储和DOM编程
2017/02/09 Javascript
JavaScript中递归实现的方法及其区别
2017/09/12 Javascript
Nodejs异步回调之异常处理实例分析
2018/06/22 NodeJs
详解使用element-ui table组件的筛选功能的一个小坑
2018/11/02 Javascript
详解vuex持久化插件解决浏览器刷新数据消失问题
2019/04/15 Javascript
简单了解微信小程序的目录结构
2019/07/01 Javascript
express框架中使用jwt实现验证的方法
2019/08/25 Javascript
layui实现根据table数据判断按钮显示情况的方法
2019/09/26 Javascript
JavaScript之scrollTop、scrollHeight、offsetTop、offsetHeight等属性学习笔记
2020/07/15 Javascript
解决Vue 移动端点击出现300毫秒延迟的问题
2020/07/21 Javascript
pycharm 使用心得(四)显示行号
2014/06/05 Python
python如何在终端里面显示一张图片
2016/08/17 Python
python使用matplotlib绘制折线图教程
2017/02/08 Python
用pycharm开发django项目示例代码
2019/06/13 Python
pyqt弹出新对话框,以及关闭对话框获取数据的实例
2019/06/18 Python
pyqt5 QlistView列表显示的实现示例
2020/03/24 Python
HTML5实现音频和视频嵌入的方法
2018/08/22 HTML / CSS
Omio荷兰:预订火车、巴士和机票
2018/11/04 全球购物
公司中层干部的自我评价分享
2014/03/01 职场文书
开业庆典主持词
2014/03/21 职场文书
高中优秀作文(范文)
2019/08/15 职场文书
励志语录:你若不勇敢,谁替你坚强
2019/11/08 职场文书
vue3中provide && inject的使用
2021/07/01 Vue.js
Java 异步任务计算FutureTask
2022/04/28 Java/Android