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中神奇的fastcgi_finish_request
May 02 PHP
shopex中集成的站长统计功能的代码简单分析
Aug 11 PHP
PHP小技巧之JS和CSS优化工具Minify的使用方法
May 19 PHP
php数组查找函数总结
Nov 18 PHP
PHP简单获取视频预览图的方法
Mar 12 PHP
php+MySql实现登录系统与输出浏览者信息功能
Jul 01 PHP
php获取远程图片并下载保存到本地的方法分析
Oct 08 PHP
php实现将数据做成json的格式给前端使用
Aug 21 PHP
PHP判断是否是微信打开还是浏览器打开的方法
Feb 27 PHP
PHP连接MySQL数据库操作代码实例解析
Jul 11 PHP
浅析PHP中json_encode与json_decode的区别
Jul 15 PHP
PHP中的异常处理机制深入讲解
Nov 10 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
咖啡语言
2021/03/03 咖啡文化
PHP Token(令牌)设计
2008/03/15 PHP
php+mysql结合Ajax实现点赞功能完整实例
2015/01/30 PHP
php获取指定范围内最接近数的方法
2015/06/02 PHP
PHP实现自动识别原编码并对字符串进行编码转换的方法
2016/07/13 PHP
PHP memcache在微信公众平台的应用方法示例
2017/09/13 PHP
PHP按符号截取字符串的指定部分的实现方法
2018/09/10 PHP
JavaScript的parseInt 进制问题
2009/05/07 Javascript
jquery 弹出登录窗口实现代码
2009/12/24 Javascript
javascript对数组的常用操作代码 数组方法总汇
2011/01/27 Javascript
Jquery中val()表单取值赋值的实例代码
2013/08/15 Javascript
js获取对象、数组的实际长度,元素实际个数的实现代码
2016/06/08 Javascript
json对象与数组以及转换成js对象的简单实现方法
2016/06/24 Javascript
使用vue.js编写蓝色拼图小游戏
2017/03/17 Javascript
webpack中如何加载静态文件的方法步骤
2019/05/18 Javascript
微信自定义分享链接信息(标题,图片和内容)实现过程详解
2019/09/04 Javascript
如何换个角度使用VUE过滤器详解
2019/09/11 Javascript
Vue.extend 编程式插入组件的实现
2019/11/18 Javascript
es6中使用map简化复杂条件判断操作实例详解
2020/02/19 Javascript
Python文件和目录操作详解
2015/02/08 Python
Pycharm学习教程(3) 代码运行调试
2017/05/03 Python
Python Django给admin添加Action的方法实例详解
2019/04/29 Python
Django框架设置cookies与获取cookies操作详解
2019/05/27 Python
python 发送json数据操作实例分析
2019/10/15 Python
Django 简单实现分页与搜索功能的示例代码
2019/11/07 Python
Python如何对齐字符串
2020/07/30 Python
CSS3教程(8):CSS3透明度指南
2009/04/02 HTML / CSS
HTML5轻松实现全屏视频背景的示例
2018/04/23 HTML / CSS
悦木之源美国官网:Origins美国
2016/08/01 全球购物
Fossil加拿大官网:化石手表、手袋、首饰及配饰
2019/04/23 全球购物
英国礼品和生活方式品牌:Treat Republic
2020/11/21 全球购物
卫校中专生个人自我评价
2013/09/19 职场文书
教师自荐信
2013/12/10 职场文书
简历的个人自我评价范文
2014/01/03 职场文书
青年志愿者活动总结
2014/04/26 职场文书
Redis过期数据是否会被立马删除
2022/07/23 Redis