postfixadmin忘记密码后的修改密码方法详解


Posted in PHP onJuly 20, 2016

本文实例讲述了postfixadmin忘记密码后的修改密码方法。分享给大家供大家参考,具体如下:

Postfix Admin 是一个基于Web的 Postfix 邮件发送服务器的管理工具,可以直接管理 Postfix 的虚拟域名和用户。

由于有一段时间没使用postfixadmin增删用户了, 突然需使用时忘记了管理密码,  使用老外的方式直接在数据库里修改密码, 后登录成功

php源码:

<?php
echo md5crypt("新密码");
// md5crypt
// Action: Creates MD5 encrypted password
// Call: md5crypt (string cleartextpassword)
function md5crypt($pw, $salt = "", $magic = "")
{
  $MAGIC = "$1$";
  if ($magic == "")
  {
    $magic = $MAGIC;
  }
  if ($salt == "")
  {
    $salt = create_salt();
  }
  $slist = explode("$", $salt);
  if (isset($slist[0]) && $slist[0] == "1")
  {
    $salt = $slist[1];
  }
  $salt = substr($salt, 0, 8);
  $ctx = $pw.$magic.$salt;
  $final = hex2bin(md5($pw.$salt.$pw));
  for ($i = strlen($pw); $i > 0; $i -= 16)
  {
    if ($i > 16)
    {
      $ctx .= substr($final,0,16);
    }
    else
    {
      $ctx .= substr($final,0,$i);
    }
  }
  $i = strlen($pw);
  while ($i > 0)
  {
    if ($i & 1)
    {
      $ctx .= chr(0);
    }
    else
    {
      $ctx .= $pw[0];
    }
    $i = $i >> 1;
  }
  $final = hex2bin(md5($ctx));
  for ($i=0; $i<1000; $i++)
  {
    $ctx1 = "";
    if ($i & 1)
    {
      $ctx1 .= $pw;
    }
    else
    {
      $ctx1 .= substr($final,0,16);
    }
    if ($i % 3)
    {
      $ctx1 .= $salt;
    }
    if ($i % 7)
    {
      $ctx1 .= $pw;
    }
    if ($i & 1)
    {
      $ctx1 .= substr($final, 0, 16);
    }
    else
    {
      $ctx1 .= $pw;
    }
    $final = hex2bin(md5($ctx1));
  }
  $passwd = "";
  $passwd .= to64(((ord($final[0]) << 16) | (ord($final[6]) << 8) | (ord($final[12]))), 4);
  $passwd .= to64(((ord($final[1]) << 16) | (ord($final[7]) << 8) | (ord($final[13]))), 4);
  $passwd .= to64(((ord($final[2]) << 16) | (ord($final[8]) << 8) | (ord($final[14]))), 4);
  $passwd .= to64(((ord($final[3]) << 16) | (ord($final[9]) << 8) | (ord($final[15]))), 4);
  $passwd .= to64(((ord($final[4]) << 16) | (ord($final[10]) << 8) | (ord($final[5]))), 4);
  $passwd .= to64(ord($final[11]), 2);
  return $magic.$salt.'$'.$passwd;
}
function create_salt()
{
  srand((double) microtime() * 1000000);
  return substr(md5(rand(0,9999999)), 0, 8);
}
// PHP around 5.3.8 includes hex2bin as native function - http://php.net/hex2bin
function hex2bin($str)
{
    $len = strlen($str);
    $nstr = "";
    for ($i = 0; $i < $len; $i += 2)
    {
      $num = sscanf(substr($str, $i, 2), "%x");
      $nstr .= chr($num[0]);
    }
    return $nstr;
}
function to64($v, $n)
{
  $ITOA64 = "./0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
  $ret = "";
  while (($n - 1) >= 0)
  {
    $n--;
    $ret .= $ITOA64[$v & 0x3f];
    $v = $v >> 6;
  }
  return $ret;
}

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
PHP4和PHP5共存于一系统
Nov 17 PHP
php横向重复区域显示二法
Sep 25 PHP
php cookie 作用范围?不要在当前页面使用你的cookie
Mar 24 PHP
php 大数据量及海量数据处理算法总结
May 07 PHP
PHP无限分类代码,支持数组格式化、直接输出菜单两种方式
May 18 PHP
使用PHP备份MYSQL数据的多种方法
Jan 15 PHP
PHP中exec函数和shell_exec函数的区别
Aug 20 PHP
php实现图片上传并利用ImageMagick生成缩略图
Mar 14 PHP
PHP实现针对日期,月数,天数,周数,小时,分,秒等的加减运算示例【基于strtotime】
Apr 19 PHP
Laravel实现autoload方法详解
May 07 PHP
PHP实现的数组和XML文件相互转换功能示例
Mar 15 PHP
实例讲解php将字符串输出到HTML
Jan 27 PHP
PHP简单日历实现方法
Jul 20 #PHP
分析PHP中单双引号的误区和双引号小隐患
Jul 19 #PHP
PHP实现数组array转换成xml的方法
Jul 19 #PHP
smarty循环嵌套用法示例分析
Jul 19 #PHP
PHP中Socket连接及读写数据超时问题分析
Jul 19 #PHP
在PHP语言中使用JSON和将json还原成数组的方法
Jul 19 #PHP
JSON两种结构之对象和数组的理解
Jul 19 #PHP
You might like
SONY ICF-SW07收音机电路分析
2021/03/02 无线电
PHP ? EasyUI DataGrid 资料取的方式介绍
2012/11/07 PHP
ThinkPHP3.1新特性之G方法的使用
2014/06/19 PHP
Linux服务器下PHPMailer发送邮件失败的问题解决
2017/03/04 PHP
对采用动态原型方式无法展示继承机制得思考
2009/12/04 Javascript
IE6中使用position导致页面变形的解决方案(js代码)
2011/01/09 Javascript
jquery自动切换tabs选项卡的具体实现
2013/12/24 Javascript
JavaScript对数字的判断与处理实例分析
2015/02/02 Javascript
jQuery插件scroll实现无缝滚动效果
2015/04/27 Javascript
简单介绍JavaScript的变量和数据类型
2015/06/03 Javascript
javascript实现简单的on事件绑定
2016/08/23 Javascript
javascript中递归的两种写法
2017/01/17 Javascript
详解Angular4中路由Router类的跳转navigate
2017/06/09 Javascript
JavaScript用二分法查找数据的实例代码
2017/06/17 Javascript
jQuery 实现图片的依次加载图片功能
2017/07/06 jQuery
JavaScript递归算法生成树形菜单
2017/08/15 Javascript
Vue infinite update loop的问题解决
2019/04/23 Javascript
Vue实现穿梭框效果
2020/09/30 Javascript
vue的webcamjs集成方式
2020/11/16 Javascript
JavaScript实现滚动加载更多
2020/12/27 Javascript
[45:32]Liquid vs LGD 2018国际邀请赛淘汰赛BO3 第二场 8.23
2018/08/24 DOTA
[01:32:50]DOTA2-DPC中国联赛 正赛 DLG vs XG BO3 第一场 1月25日
2021/03/11 DOTA
Python连接DB2数据库
2016/08/27 Python
Python编程产生非均匀随机数的几种方法代码分享
2017/12/13 Python
解决Mac安装scrapy失败的问题
2018/06/13 Python
python实现ID3决策树算法
2018/08/29 Python
浅谈django的render函数的参数问题
2018/10/16 Python
Django后端分离 使用element-ui文件上传方式
2020/07/12 Python
详解CSS3选择器的使用方法汇总
2015/11/24 HTML / CSS
Tiqets荷兰:出售欧洲最美丽的景点和博物馆门票
2018/01/09 全球购物
英国领先的瓷砖专家:Walls and Floors
2018/04/27 全球购物
编程输出如下图形
2013/11/24 面试题
班长岗位职责
2013/11/10 职场文书
小学优秀教师材料
2014/12/15 职场文书
python生成随机数、随机字符、随机字符串
2021/04/06 Python
解决go在函数退出后子协程的退出问题
2021/04/30 Golang