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 相关文章推荐
eWebEditor v3.8 商业完整版 (PHP)
Dec 06 PHP
PHP Socket 编程
Apr 09 PHP
php适配器模式介绍
Aug 14 PHP
JoshChen_php新手进阶高手不可或缺的规范介绍
Aug 16 PHP
详解WordPress中给链接添加查询字符串的方法
Dec 18 PHP
PHP中substr函数字符串截取用法分析
Jan 07 PHP
详解PHP的Yii框架中自带的前端资源包的使用
Mar 31 PHP
PHP中PDO的事务处理分析
Apr 07 PHP
zen cart实现订单中增加paypal中预留电话的方法
Jul 12 PHP
PHP简单日历实现方法
Jul 20 PHP
laravel 5异常错误:FatalErrorException in Handler.php line 38的解决
Oct 12 PHP
PHP多进程通信-消息队列使用
Mar 08 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基于mcrypt_encrypt和mcrypt_decrypt实现字符串加密解密的方法
2016/07/12 PHP
PHP实现限制IP访问及提交次数的方法详解
2017/07/17 PHP
php中get_object_vars()在数组的实例用法
2021/02/22 PHP
javascript下function声明一些小结
2007/12/28 Javascript
jQuery设置div一直在页面顶部显示的方法
2013/10/24 Javascript
css3元素简单的闪烁效果实现(html5 jquery)
2013/12/28 Javascript
Jquery.Form 异步提交表单的简单实例
2014/03/03 Javascript
javascript随机之洗牌算法深入分析
2014/06/07 Javascript
Js实现网页键盘控制翻页的方法
2014/10/30 Javascript
基于jQuery实现文本框缩放以及上下移动功能
2014/11/24 Javascript
详解JavaScript基于面向对象之创建对象(2)
2015/12/10 Javascript
纯js实现html转pdf的简单实例(推荐)
2017/02/16 Javascript
jQuery实现遍历复选框的方法示例
2017/03/06 Javascript
Angularjs 1.3 中的$parse实例代码
2017/09/14 Javascript
bootstrapTable+ajax加载数据 refresh更新数据
2018/08/31 Javascript
JavaScript ES6箭头函数使用指南
2018/12/30 Javascript
用node撸一个监测复联4开售短信提醒的实现代码
2019/04/10 Javascript
JS正则表达式验证密码强度
2020/03/18 Javascript
[00:58]PWL开团时刻DAY5——十人开雾0换5
2020/11/04 DOTA
python使用clear方法清除字典内全部数据实例
2015/07/11 Python
Python shelve模块实现解析
2019/08/28 Python
Django自带的加密算法及加密模块详解
2019/12/03 Python
Python 使用双重循环打印图形菱形操作
2020/08/09 Python
什么是Remote Module
2016/06/10 面试题
本科生职业生涯规划书范文
2014/01/21 职场文书
《台湾的蝴蝶谷》教学反思
2014/02/20 职场文书
物理系毕业生自荐书范文
2014/02/22 职场文书
经营管理策划方案
2014/05/22 职场文书
会计系毕业生求职信
2014/05/28 职场文书
新手上路标语
2014/06/20 职场文书
三八妇女节趣味活动方案
2014/08/23 职场文书
庆国庆活动总结
2014/08/28 职场文书
2015商场元旦促销活动策划方案
2014/12/09 职场文书
遗嘱范文
2015/08/07 职场文书
JS新手入门数组处理的实用方法汇总
2021/04/07 Javascript
 Redis 串行生成顺序编码的方法实现
2022/04/03 Redis