PHP Bruteforce Password Generator

Discussion in 'PHP' started by h0d, 31 Dec 2007.

  1. h0d

    h0d New Member

    Joined:
    31 Dec 2007
    Messages:
    3
    Likes Received:
    1
    Reputations:
    0
    pwdgen.class.php:
    PHP:
    <?
    /**
     * Password Generator Class

     * @author  hodik
     * @package Classes
     * @subpackage pwdgen
     * @version 1.0
     * @filesource
     */

    /**
     * CPasswordGenerator

     * @package Classes
     * @subpackage pwdgen
     */ 
    class CPasswordGenerator{
        
    /**
         * @desc минимальная длина генерируемого пароля
         * @access private
         */
        
    var $_minlen 0;
        
        
    /**
         * @desc максимальная длина генерируемого пароля
         * @access private
         */    
        
    var $_maxlen 0;
        
        
    /**
         * @desc символы, из которых должен состоять пароль
         * @access private
         */
        
    var $_alphabet "";
        
        
    /**
         * @desc текущий вариант пароля
         * @access private
         */
        
    var $_curPwd "";
        
        
    /**
         * @desc массив с числами, соответствующими буквам алфавита
         * @access private
         */
        
    var $_curPwdAr = array();

        
    /**
         * @desc текущая длина пароля
         * @access private
         */
        
    var $_curPwdLen 0;
        
        
    /**
         * @desc вариант последнего пароля при заданной длине и алфавите
         * @access private
         */
        
    var $_lastPwd "";
        
        
    /**
         * @desc
         * @access private
         */
        
    var $_index 0;
        
        
    /**
         * @desc длина алфавита
         * @access private
         */
        
    var $_alphaLen 0;

        
    /**
         * @desc длина алфавита минус один, чуток ускоряет генерацию
         * @access private
         */    
        
    var $_intAlphaLen 0;
        
        
    /**
         * Конструктор
         * @access public
         * @param int минимальная длина пароля
         * @param int максимальная длина 
         * @param string алфавит
         * @return void
         */
        
    function CPasswordGenerator($minLength$maxLength$alphabet)
        {
            
    $this->_minlen      $minLength;
            
    $this->_maxlen      $maxLength;
            
    $this->_alphabet    $alphabet;
            
    $this->_alphaLen    strlen($this->_alphabet);
            
    $this->_intAlphaLen $this->_alphaLen 1;
            
            
    $this->_init($this->_minlen);
        }
        
        
    /**
         * Производит инициализацию
         * @access private
         * @return bool true-успешно, false-неудача
        */
        
    function _init($len)
        {
            if (!
    strlen($this->_alphabet)) 
            {
                
    trigger_error("Alphabet is empty");
                return 
    false;
            }
            if(!(
    $this->_minlen <= $len && $len <= $this->_maxlen))
            {
                
    //trigger_error("Password length isn't correspond for its conditions");
                
    return false;
            }
            
            
    //генерируем последний вариант пароля
            //и заполняем таблицу для бэктрекинга (backtracking)
            
    $this->_curPwdLen $len;
            
    $this->_index      0;
            
    $this->_curPwdAr  = array();
            
    $this->_curPwd    "";
            
    $this->_lastPwd   "";
            for(
    $i 0$i $len$i++)
            {
                
    $this->_lastPwd       .= $this->_alphabet[$this->_alphaLen 1];
                
    $this->_curPwd        .= "a"//может стоять любой символ
                
    $this->_curPwdAr[$i]   = -1;
            }
            
    $this->_curPwdAr[$len] = $this->_alphaLen;
            
            return 
    true;
        }
        
        
    /**
         * Генерирует пароль
         * @access public
         * @param &string переменная, куда будет записан пароль
         * @return bool true-пароль успешно сгенерирован, false-все варианты исчерпаны
        */
        
    function getNext(&$pwd)
        {
            if(
    $this->_curPwd == $this->_lastPwd)
            {
                if (!
    $this->_init($this->_curPwdLen 1)) return false;
            }
            
            while(
    $this->_index >= 0)
            {
                while(
    $this->_curPwdAr[$this->_index] < $this->_intAlphaLen)
                {
                    
    $this->_curPwdAr[$this->_index] += 1;
                    
    $this->_curPwd[$this->_index]    = $this->_alphabet[$this->_curPwdAr[$this->_index]];
                    
    $this->_index++;
                    
                    if(
    $this->_index == $this->_curPwdLen)
                    {
                        
    $pwd $this->_curPwd;
                        return 
    true;
                    }
                }
                if(
    $this->_index != $this->_curPwdLen$this->_curPwdAr[$this->_index] = -1;
                
    $this->_index--;
            }
        }
    }
    ?> 
    пример использования:
    PHP:
    <?
    include(
    "pwdgen.class.php");
    //минимальная длина, максимальная длина, алфавит
    $pwdgen = new CPasswordGenerator(13"abcxyz123");
    while(
    $pwdgen->getNext($pwd))
    {
        print 
    "$pwd\n";
    }
    ?> 
     
    1 person likes this.
  2. bul.666

    bul.666 булка

    Joined:
    6 Jun 2006
    Messages:
    719
    Likes Received:
    425
    Reputations:
    140
    Омг... =\ накуя стока лишних букав? Генератор пассов... Мда у людей просто пропало воображение... =\
     
    2 people like this.
  3. h0d

    h0d New Member

    Joined:
    31 Dec 2007
    Messages:
    3
    Likes Received:
    1
    Reputations:
    0
    это для меня любимого документация=) тому, кому не нравится, пусть сразу переходят к примерам=)