Вход Регистрация
Файл: library/XenForo/Authentication/Core.php
Строк: 98
<?php

/**
 * Core authentication method.
 *
 * @package XenForo_Authentication
 */
class XenForo_Authentication_Core extends XenForo_Authentication_Abstract
{
    
/**
    * Password info for this authentication object
    *
    * @var array
    */
    
protected $_data = array();

    
/**
    * Hash function to use for generating salts and passwords
    *
    * @var string
    */
    
protected $_hashFunc '';

    
/**
    * Setup the hash function
    */
    
protected function _setupHash()
    {
        if (
$this->_hashFunc)
        {
            return;
        }

        if (
extension_loaded('hash'))
        {
            
$this->_hashFunc 'sha256';
        }
        else
        {
            
$this->_hashFunc 'sha1';
        }
    }

    
/**
    * Perform the hashing based on the function set
    *
    * @param string
    *
    * @return string The new hashed string
    */
    
protected function _createHash($data)
    {
        
$this->_setupHash();
        switch (
$this->_hashFunc)
        {
            case 
'sha256':
                return 
hash('sha256'$data);
            case 
'sha1':
                return 
sha1($data);
            default:
                throw new 
XenForo_Exception("Unknown hash type");
        }
    }

    protected function 
_newPassword($password$salt)
    {
        
$hash $this->_createHash($this->_createHash($password) . $salt);
        return array(
'hash' => $hash'salt' => $salt'hashFunc' => $this->_hashFunc);
    }

    
/**
    * Initialize data for the authentication object.
    *
    * @param string   Binary data from the database
    */
    
public function setData($data)
    {
        
$this->_data unserialize($data);
        
$this->_hashFunc $this->_data['hashFunc'];
    }

    
/**
    * Generate new authentication data
    * @see XenForo_Authentication_Abstract::generate()
    */
    
public function generate($password)
    {
        if (!
is_string($password) || $password === '')
        {
            return 
false;
        }

        
$salt $this->_createHash(self::generateSalt());
        
$data $this->_newPassword($password$salt);
        return 
serialize($data);
    }

    
/**
    * Authenticate against the given password
    * @see XenForo_Authentication_Abstract::authenticate()
    */
    
public function authenticate($userId$password)
    {
        if (!
is_string($password) || $password === '' || empty($this->_data))
        {
            return 
false;
        }

        
$userHash $this->_createHash($this->_createHash($password) . $this->_data['salt']);
        return (
$userHash === $this->_data['hash']);
    }
}
Онлайн: 3
Реклама