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在DOS命令行下却无法链接MySQL的技术笔记
Dec 29 PHP
php中用foreach来操作数组的代码
Jul 17 PHP
解析centos中Apache、php、mysql 默认安装路径
Jun 25 PHP
解析php通过cookies获取远程网页的指定代码
Jun 25 PHP
php随机显示图片的简单示例
Feb 15 PHP
php数组合并的二种方法
Mar 21 PHP
PHP图像处理类库MagickWand用法实例分析
May 21 PHP
php导出csv文件,可导出前导0实例代码
Nov 16 PHP
利用PHPExcel实现Excel文件的写入和读取
Apr 26 PHP
PHP实现的自定义图像居中裁剪函数示例【测试可用】
Aug 11 PHP
PHP实现的简单对称加密与解密方法实例小结
Aug 28 PHP
laravel请求参数校验方法
Oct 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
windows下PHP APACHE MYSQ完整配置
2007/01/02 PHP
改变Apache端口等配置修改方法
2008/06/05 PHP
php中将图片gif,jpg或mysql longblob或blob字段值转换成16进制字符串
2011/08/23 PHP
php class中public,private,protected的区别以及实例分析
2013/06/18 PHP
关于PHP开发的9条建议
2015/07/27 PHP
thinkPHP统计排行与分页显示功能示例
2016/12/02 PHP
php远程请求CURL实例教程(爬虫、保存登录状态)
2020/12/10 PHP
学习YUI.Ext 第三天
2007/03/10 Javascript
ImageFlow可鼠标控制图片滚动
2008/01/30 Javascript
JavaScript 构造函数 面相对象学习必备知识
2010/06/09 Javascript
javascript计算当月剩余天数(天数计算器)示例代码
2014/01/09 Javascript
jquery及js实现动态加载js文件的方法
2016/01/21 Javascript
bootstrap-Treeview实现级联勾选
2017/11/23 Javascript
vue2.0 资源文件assets和static的区别详解
2018/04/08 Javascript
js实现指定时间倒计时效果
2019/08/26 Javascript
原生javascript制作贪吃蛇小游戏的方法分析
2020/02/26 Javascript
解决antd的Form组件setFieldsValue的警告问题
2020/10/29 Javascript
python pandas 对series和dataframe的重置索引reindex方法
2018/06/07 Python
python 实现在一张图中绘制一个小的子图方法
2019/07/07 Python
Django 权限认证(根据不同的用户,设置不同的显示和访问权限)
2019/07/24 Python
浅谈tensorflow模型保存为pb的各种姿势
2020/05/25 Python
python读取excel数据绘制简单曲线图的完整步骤记录
2020/10/30 Python
美国葡萄酒网上商店:Martha Stewart Wine Co.
2019/03/17 全球购物
波兰在线运动商店:YesSport
2020/07/23 全球购物
师范应届生语文教师求职信
2013/10/29 职场文书
产品销售员岗位职责
2013/12/18 职场文书
现金出纳岗位职责
2014/03/15 职场文书
2014年酒店前台工作总结
2014/11/14 职场文书
英语教师个人工作总结
2015/02/09 职场文书
幼儿园六一儿童节活动总结
2015/02/10 职场文书
挂职个人工作总结
2015/03/05 职场文书
中学推普周活动总结
2015/05/07 职场文书
2016消防宣传标语口号
2015/12/26 职场文书
2016年国庆节假期旅游工作总结
2016/04/01 职场文书
Java使用httpRequest+Jsoup爬取红蓝球号码
2021/07/02 Java/Android
nginx从安装到配置详细说明(安装,安全配置,防盗链,动静分离,配置 HTTPS,性能优化)
2022/02/12 Servers