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 相关文章推荐
对squid中refresh_pattern的一些理解和建议
Apr 17 PHP
PHP 最大运行时间 max_execution_time修改方法
Mar 08 PHP
openPNE常用方法分享
Nov 29 PHP
浅析php插件 HTMLPurifier HTML解析器
Jul 01 PHP
php结合安卓客户端实现查询交互实例
May 05 PHP
PHP+swoole实现简单多人在线聊天群发
Jan 19 PHP
ThinkPHP中Common/common.php文件常用函数功能分析
May 20 PHP
Docker配置PHP开发环境教程
Dec 21 PHP
php实现页面纯静态的实例代码
Jun 21 PHP
简单实现php上传文件功能
Sep 21 PHP
PHP让数组中有相同值的组成新的数组实例
Dec 31 PHP
浅析PHP类的反射来实现依赖注入过程
Feb 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中通过正则表达式下载内容中的远程图片的函数代码
2012/01/10 PHP
基于MySQL到MongoDB简易对照表的详解
2013/06/03 PHP
TNC vs BOOM BO3 第三场2.13
2021/03/10 DOTA
解决使用attachEvent函数时,this指向被绑定的元素的问题的方法
2007/08/13 Javascript
零基础学JavaScript最新动画教程+iso光盘下载
2008/01/22 Javascript
checkbox 复选框不能为空
2009/07/11 Javascript
Google 静态地图API实现代码
2010/11/19 Javascript
IE下window.onresize 多次调用与死循环bug处理方法介绍
2013/11/12 Javascript
JavaScript中使用typeof运算符需要注意的几个坑
2014/11/08 Javascript
JavaScript仿商城实现图片广告轮播实例代码
2016/02/06 Javascript
js实现人民币大写金额形式转换
2016/04/27 Javascript
关于javascript原型的修改与重写(覆盖)差别详解
2016/08/31 Javascript
jQuery中on方法使用注意事项详解
2017/02/15 Javascript
javascript修改浏览器title方法 JS动态修改浏览器标题
2017/11/30 Javascript
vue实现密码显示与隐藏按钮的自定义组件功能
2019/04/23 Javascript
微信小程序嵌入腾讯视频源过程详解
2019/08/08 Javascript
node.JS事件机制与events事件模块的使用方法详解
2020/02/06 Javascript
[07:12]2014DOTA2西雅图国际邀请赛 黑马Liquid专题采访
2014/07/12 DOTA
python创建关联数组(字典)的方法
2015/05/04 Python
Python使用multiprocessing实现一个最简单的分布式作业调度系统
2016/03/14 Python
利用numpy实现一、二维数组的拼接简单代码示例
2017/12/15 Python
python如何读写csv数据
2018/03/21 Python
flask框架实现连接sqlite3数据库的方法分析
2018/07/16 Python
Flask框架Flask-Principal基本用法实例分析
2018/07/23 Python
对Tensorflow中tensorboard日志的生成与显示详解
2020/02/04 Python
浅谈PyTorch的可重复性问题(如何使实验结果可复现)
2020/02/20 Python
Python return语句如何实现结果返回调用
2020/10/15 Python
简单介绍Object类的功能、常用方法
2013/10/02 面试题
编程实现当输入某产品代码则打印出该产品记录的功能
2014/05/03 面试题
小学数学国培感言
2014/03/10 职场文书
团队激励口号
2014/06/06 职场文书
2015羊年春节慰问信
2015/02/14 职场文书
Python3接口性能测试实例代码
2021/06/20 Python
Mongo服务重启异常问题的处理方法
2021/07/01 MongoDB
基于Python实现股票收益率分析
2022/04/02 Python
Node.js实现爬取网站图片的示例代码
2022/04/04 NodeJs