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操作XML作为数据库的类
Dec 19 PHP
php数据库配置文件一般做法分享
Jul 07 PHP
浅析linux下apache服务器的配置和管理
Aug 10 PHP
开源php中文分词系统SCWS安装和使用实例
Apr 11 PHP
php 模拟 asp.net webFrom 按钮提交事件实例
Oct 13 PHP
详解php比较操作符的安全问题
Dec 03 PHP
PHP模板引擎Smarty中变量的使用方法示例
Apr 11 PHP
PHP数据库表操作的封装类及用法实例详解
Jul 12 PHP
PHP实现二维数组按某列进行排序的方法
Nov 18 PHP
PHP面向对象程序设计之对象生成方法详解
Dec 02 PHP
PHP实现的DES加密解密类定义与用法示例
Nov 02 PHP
php微信公众号开发之二级菜单
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
如何跨站抓取别的站点的页面的补充
2006/10/09 PHP
php 输出双引号&quot;与单引号'的方法
2010/05/09 PHP
PHP字符过滤函数去除字符串最后一个逗号(rtrim)
2013/03/26 PHP
使用Sphinx对索引进行搜索
2013/06/25 PHP
thinkPHP模板中函数的使用方法示例
2016/11/30 PHP
PHP工厂模式、单例模式与注册树模式实例详解
2019/06/03 PHP
RGB颜色值转HTML十六进制(HEX)代码的JS函数
2009/04/25 Javascript
jQuery数组处理方法汇总
2011/06/20 Javascript
DB.ASP 用Javascript写ASP很灵活很好用很easy
2011/07/31 Javascript
禁用Tab键JS代码兼容Firefox和IE
2014/04/18 Javascript
jQuery+jsp实现省市县三级联动效果(附源码)
2015/12/03 Javascript
Angular2从搭建环境到开发步骤详解
2016/10/17 Javascript
AngularJS入门教程之路由机制ngRoute实例分析
2016/12/13 Javascript
详解javascript立即执行函数表达式IIFE
2017/02/13 Javascript
解决使用Vue.js显示数据的时,页面闪现原始代码的问题
2018/02/11 Javascript
说说node中的可读流和可写流的区别
2018/06/01 Javascript
vue 监听某个div垂直滚动条下拉到底部的方法
2018/09/15 Javascript
jQuery层叠选择器用法实例分析
2019/06/28 jQuery
vue webpack重写cookie路径的方法
2019/07/10 Javascript
Vue + Element-ui的下拉框el-select获取额外参数详解
2020/08/14 Javascript
python requests 使用快速入门
2017/08/31 Python
python调用系统ffmpeg实现视频截图、http发送
2018/03/06 Python
Python绘制正余弦函数图像的方法
2018/08/28 Python
python多任务及返回值的处理方法
2019/01/22 Python
Python实现连接MySql数据库及增删改查操作详解
2019/04/16 Python
python如何实现数据的线性拟合
2019/07/19 Python
Numpy数组的广播机制的实现
2020/11/03 Python
HTML5 Blob对象的具体使用
2020/05/22 HTML / CSS
劳力士官方珠宝商:J.R. Dunn Jewelers
2018/09/29 全球购物
学院书画协会部门职责
2013/11/28 职场文书
旅游安全协议书
2014/04/21 职场文书
公司任命书范本
2014/06/04 职场文书
2014年政风行风评议工作总结
2014/10/21 职场文书
项目经理岗位职责
2015/01/31 职场文书
vue2的 router在使用过程中遇到的一些问题
2022/04/13 Vue.js
Redis 异步机制
2022/05/15 Redis