PHP Bruteforce Password Generator

Тема в разделе "Статьи", создана пользователем hodik, 15 авг 2007.

  1. hodik
    hodik Guest
    PHP:
    <?
    /**
     * Password Generator Class

     * @author  hodik <icq://664679>
     * @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(1, 3, "abcxyz123");
    while(
    $pwdgen->getNext($pwd))
    {
        print 
    "$pwd\n";
    }
    ?>
     
    15 авг 2007
    3 пользователям это понравилось.
  2. fYt
    fYt Guest
    Class лишние файлы, думаю удобнее функцию отдельную написать.
     
    15 авг 2007
  3. hodik
    hodik Guest
    Функцией больше геморра, а так две строчки и работает.
     
    15 авг 2007
Загрузка...