Joomla 3.2.1密码加密

Gre*_*gor 10 php joomla password-hash

当用户在网站上注册时,我在密码表中查看数据库joomla_users,有以下格式存储的密码:

  • $ P $ Do8QrURFT1r0NlWf0X/GRDF/aMqwqK /

  • $ P $ DH38Lch9z508gJiop3A6u0whTity390

  • ........

但不是文档中描述的形式(MD5 +":"+ SALT):

  • 1802ebc64051d5b4f4d1b408babb5020:0PHJDbnsyX05YpKbAuLYnw2VCzFMW2VK

我需要为我澄清这一点,因为我正在使用外部脚本检查用户凭据以检查密码匹配.

在我的PHP脚本中,我有代码从数据库中的密码中分离SALT:

$parts   = explode( ':', $password_database );
$crypt   = $parts[0];
$salt   = $parts[1];
Run Code Online (Sandbox Code Playgroud)

但如果没有dobule结(:),我不能这样做

Job*_*ose 15

试试这个,

下面的代码是创建Joomla标准密码(旧版本1.5,1.7等).

 jimport('joomla.user.helper');
 $salt = JUserHelper::genRandomPassword(32);
 $crypt = JUserHelper::getCryptedPassword($password_choose, $salt);
 $password = $crypt.':'.$salt;
Run Code Online (Sandbox Code Playgroud)

Joomla 3.2+引入了PHP的密码算法bcrypt,但它需要最低的PHP 5.3+如果您打算使用bcrypt,请确保您的服务器PHP版本具备此功能,请在此处阅读更多内容.

Joomla的另一个版本使用以下方法(Joomla 3.x)

 jimport('joomla.user.helper');
 $yourpass = JUserHelper::hashPassword($password_choose);
Run Code Online (Sandbox Code Playgroud)

旧算法也可以在最新版本中正常工作,唯一不同的是旧版本创建65个字符的密码而新的创建34个字符串.总是使用更新版本

此外,如果您使用外部脚本应包括如下所示的Joomla框架.这应该在你的外部PHP文件的顶部

define( '_JEXEC', 1 );
define('JPATH_BASE', dirname(__FILE__) );//this is when we are in the root
define( 'DS', DIRECTORY_SEPARATOR );

require_once ( JPATH_BASE .DS.'includes'.DS.'defines.php' );
require_once ( JPATH_BASE .DS.'includes'.DS.'framework.php' );

$mainframe =& JFactory::getApplication('site');
$mainframe->initialise();
Run Code Online (Sandbox Code Playgroud)

你还提到你必须检查用户凭证,然后不需要检查密码格式,所有的东西只是在框架加载后使用下面的代码.

   $credentials['username'] = $data['username']; //user entered name
   $credentials['password'] = $data['password']; //users entered password
   $app = JFactory::getApplication();
   $error = $app->login($credentials, $options);
   if (!JError::isError($error)) {
    // login success
    }
  else{
    //Failed attempt
   }
Run Code Online (Sandbox Code Playgroud)

希望能帮助到你..

  • 最新版本的 Joomla 使用内置的 PHP [password_hash](http://php.net/manual/it/function.password-hash.php) 函数(PHP >= 5.5)。该散列函数使用“标准”bcrypt 算法,该算法可用于多种语言。 (2认同)

Dav*_*sch 10

Joomla的默认用户类不再使用salted MD5来散列密码.类的绑定功能JUser现在调用JUserHelper::hashPassword($array['password'])加密密码.

该功能目前是这样的:

public static function hashPassword($password)
    {
            // Use PHPass's portable hashes with a cost of 10.
            $phpass = new PasswordHash(10, true);

            return $phpass->HashPassword($password);
    }
Run Code Online (Sandbox Code Playgroud)

这意味着它现在依赖于PHPass,您可以在这里阅读更多信息:http://www.openwall.com/phpass/.基于阅读本网站的介绍,我猜测加密现在bcrypt而不是MD5,但Joomla可能已经覆盖了默认加密.


Mik*_*kel 5

有了David Fritsch的回答,我可以像Joomla那样做一个加密的密码:

<?php
    define( '_JEXEC', 1 );
    define('JPATH_BASE', dirname(__FILE__) );//this is when we are in the root
    define( 'DS', DIRECTORY_SEPARATOR );

    require_once( JPATH_BASE .DS.'includes'.DS.'defines.php' );
    require_once( JPATH_BASE .DS.'includes'.DS.'framework.php' );

    $mainframe =& JFactory::getApplication('site');
    $mainframe->initialise();

    jimport('joomla.user.helper');
    $password = "test";     
    echo "<strong>Password: </strong>" . JUserHelper::hashPassword($password);
?>
Run Code Online (Sandbox Code Playgroud)

请注意,您必须将文件存储在joomla根目录中,或更改JPATH_BASE.