Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   PHP, PERL, MySQL, JavaScript (https://forum.antichat.xyz/forumdisplay.php?f=37)
-   -   PHP Bruteforce Password Generator (https://forum.antichat.xyz/showthread.php?t=57029)

h0d 31.12.2007 21:05

PHP Bruteforce Password Generator
 
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";
}
?>


bul.666 31.12.2007 21:08

Омг... =\ накуя стока лишних букав? Генератор пассов... Мда у людей просто пропало воображение... =\

h0d 31.12.2007 21:15

это для меня любимого документация=) тому, кому не нравится, пусть сразу переходят к примерам=)


Время: 13:44