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
php+jquery编码方面的一些心得(utf-8 gb2312)
Oct 12 PHP
PHP取进制余数函数代码
Jan 19 PHP
php把session写入数据库示例
Feb 26 PHP
php实例分享之html转为rtf格式
Jun 02 PHP
php 判断网页是否是utf8编码的方法
Jun 06 PHP
php中socket通信机制实例详解
Jan 03 PHP
PHP中使用Imagick读取pdf并生成png缩略图实例
Jan 21 PHP
PHP实现算式验证码和汉字验证码实例
Mar 09 PHP
php无序树实现方法
Jul 28 PHP
Laravel 微信小程序后端实现用户登录的示例代码
Nov 26 PHP
宝塔面板出现“open_basedir restriction in effect. ”的解决方法
Mar 14 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/08/14 PHP
php获取系统变量方法小结
2015/05/29 PHP
PHP后端银联支付及退款实例代码
2017/06/23 PHP
jQuery 加上最后自己的验证
2009/11/04 Javascript
JQuery select控件的相关操作实现代码
2012/09/14 Javascript
使用js在页面中绘制表格核心代码
2013/09/16 Javascript
鼠标滑过出现预览的大图提示效果
2014/02/26 Javascript
javascript在当前窗口关闭前检测窗口是否关闭
2014/09/29 Javascript
JSONP跨域GET请求解决Ajax跨域访问问题
2014/12/31 Javascript
JavaScript基于ajax编辑信息用法实例
2015/07/15 Javascript
JS实现自动变化的导航菜单效果代码
2015/09/09 Javascript
jQuery实现默认是闭合的FAQ展开效果菜单
2015/09/14 Javascript
Bootstrap Metronic完全响应式管理模板之菜单栏学习笔记
2016/07/08 Javascript
JavaScript中捕获/阻止捕获、冒泡/阻止冒泡方法
2016/12/07 Javascript
ES6学习教程之Map的常用方法总结
2017/08/03 Javascript
基于dataset的使用和图片延时加载的实现方法
2017/12/11 Javascript
JavaScript中的一些隐式转换和总结(推荐)
2017/12/22 Javascript
利用Node.js批量抓取高清妹子图片实例教程
2018/08/02 Javascript
使用javascript做时间倒数读秒功能的实例
2019/01/23 Javascript
JavaScript setInterval()与setTimeout()计时器
2019/12/27 Javascript
vuex入门最详细整理
2020/03/04 Javascript
机器学习10大经典算法详解
2017/12/07 Python
详谈python在windows中的文件路径问题
2018/04/28 Python
django 删除数据库表后重新同步的方法
2018/05/27 Python
使用Python如何测试InnoDB与MyISAM的读写性能
2018/09/18 Python
python 执行终端/控制台命令的例子
2019/07/12 Python
pygame实现非图片按钮效果
2019/10/29 Python
python读取xml文件方法解析
2020/08/04 Python
filter使用python3代码进行迭代元素的实例详解
2020/12/03 Python
亚洲最大的运动鞋寄售店:KicksCrew
2020/11/26 全球购物
毕业生个人的自我评价优秀范文
2013/10/03 职场文书
在职人员函授期间自我评价分享
2013/11/08 职场文书
表扬信格式
2014/01/12 职场文书
国窖1573广告词
2014/03/21 职场文书
12.4全国法制宣传日活动方案
2014/11/02 职场文书
2016母亲节感恩话语
2015/12/09 职场文书