postfixadmin忘記密碼后的修改密碼方法詳解

字號:


    本文實例講述了postfixadmin忘記密碼后的修改密碼方法。分享給大家供大家參考,具體如下:
    Postfix Admin 是一個基于Web的 Postfix 郵件發(fā)送服務(wù)器的管理工具,可以直接管理 Postfix 的虛擬域名和用戶。
    由于有一段時間沒使用postfixadmin增刪用戶了, 突然需使用時忘記了管理密碼,  使用老外的方式直接在數(shù)據(jù)庫里修改密碼, 后登錄成功
    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程序設(shè)計有所幫助。