• 技术文章 >后端开发 >php教程

    php用户密码加密算法实例分析

    墨辰丷墨辰丷2018-06-01 10:00:12原创663
    这篇文章主要介绍了php用户密码加密算法,较为详细的分析了Discuz加密算法的原理,并结合实例形式对比了.net算法的实现方法总结了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内存缓存功能memcached图文详解

    php封装的smarty类案例

    php封装的smartyBC类

    以上就是php用户密码加密算法实例分析的详细内容,更多请关注php中文网其它相关文章!

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    专题推荐:实例分析 php 算法
    上一篇:Laravel 集成 Geetest验证码的方法 下一篇:php fseek实现函数读取大文件的两种方法
    千万级数据并发解决方案

    相关文章推荐

    • 100道常见PHP面试题(附解析),增强你的知识储备!• [视频教程]LAMP兄弟连视PHP函数-printf• 专家预言:PHP将比Java更受开发人员欢迎• php 数据采集-php如何连结数据库,怎么写代码• mysql-在Windows32进行自定义环境搭建测试PHP连接MySQL时总是提示Fatal error: Call to undefined function
    1/1

    PHP中文网