Gre*_*gor 10 php joomla password-hash
当用户在网站上注册时,我在密码表中查看数据库joomla_users,有以下格式存储的密码:
$ P $ Do8QrURFT1r0NlWf0X/GRDF/aMqwqK /
$ P $ DH38Lch9z508gJiop3A6u0whTity390
但不是文档中描述的形式(MD5 +":"+ SALT):
我需要为我澄清这一点,因为我正在使用外部脚本检查用户凭据以检查密码匹配.
在我的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)
希望能帮助到你..
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可能已经覆盖了默认加密.
有了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.
| 归档时间: |
|
| 查看次数: |
24674 次 |
| 最近记录: |