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 相关文章推荐
如何去掉文章里的 html 语法
Oct 09 PHP
PHP的开合式多级菜单程序
Oct 09 PHP
MySQL修改密码方法总结
Mar 25 PHP
smarty的保留变量问题
Oct 23 PHP
PHP 中执行排序与 MySQL 中排序
Apr 21 PHP
php 数组的一个悲剧?
May 11 PHP
浅析echo(),print(),print_r(),return之间的区别
Nov 27 PHP
利用浏览器的Javascript控制台调试PHP程序
Jan 08 PHP
PHP封装的一个支持HTML、JS、PHP重定向的多功能跳转函数
Jun 19 PHP
如何解决PHP使用mysql_query查询超大结果集超内存问题
Mar 14 PHP
php实现支持中文的文件下载功能示例
Aug 30 PHP
PHP实现抽奖功能实例代码
Jun 30 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
PHP4 与 MySQL 数据库操作函数详解
2006/12/06 PHP
分享8个最佳的代码片段在线测试网站
2013/06/29 PHP
php和editplus正则表达式去除空白行
2015/04/17 PHP
PHP中spl_autoload_register()函数用法实例详解
2016/07/18 PHP
PHP二维数组矩形转置实例
2016/07/20 PHP
php arsort 数组降序排序详细介绍
2016/11/17 PHP
thinkPHP5.0框架整体架构总览【应用,模块,MVC,驱动,行为,命名空间等】
2017/03/25 PHP
JavaScript实现九九乘法表的简单实例
2016/06/07 Javascript
JavaScript正则表达式替换字符串中图片地址(img src)的方法
2017/01/13 Javascript
jQuery基于Ajax方式提交表单功能示例
2017/02/10 Javascript
bootstrap轮播图示例代码分享
2017/05/17 Javascript
JavaScript callback回调函数用法实例分析
2018/05/08 Javascript
vue :src 文件路径错误问题的解决方法
2018/05/15 Javascript
详解JavaScript 浮点数运算的精度问题
2019/07/23 Javascript
在Windows8上的搭建Python和Django环境
2014/07/03 Python
总结python爬虫抓站的实用技巧
2016/08/09 Python
Python subprocess模块常见用法分析
2018/06/12 Python
Python爬虫将爬取的图片写入world文档的方法
2018/11/07 Python
pandas 如何分割字符的实现方法
2019/07/29 Python
python在协程中增加任务实例操作
2021/02/28 Python
CSS3控制HTML元素动画效果
2014/02/08 HTML / CSS
在网上学习全世界最好的课程:Coursera
2017/11/07 全球购物
TIME时代杂志台湾总代理:台时亚洲
2018/10/22 全球购物
Capitol Lighting的1800lighting.com:住宅和商业照明
2019/04/10 全球购物
运动鞋、足球鞋和慕尼黑球衣:Sport Münzinger
2019/08/26 全球购物
澳大利亚领先的男装零售连锁店:Lowes
2020/08/07 全球购物
急诊科护士自我鉴定
2013/10/14 职场文书
低碳生活倡议书
2014/04/14 职场文书
质监局领导班子对照检查材料思想汇报
2014/09/27 职场文书
党员评议表自我评价范文
2014/10/20 职场文书
经营目标责任书
2015/05/08 职场文书
职工宿舍管理制度
2015/08/05 职场文书
2016年12月份红领巾广播稿
2015/12/21 职场文书
python脚本框架webpy模板控制结构
2021/11/20 Python
各国货币符号大全
2022/02/17 杂记
win10忘记pin密码登录不了怎么办?win10忘记pin密码登不进去的解决方法
2022/07/07 数码科技