ユーザーがサイトに登録し、パスワードテーブルのデータベースjoomla_usersを調べると、次の形式で保存されているパスワードがあります。
$ P $ Do8QrURFT1r0NlWf0X/grdF/aMqwqK /
$ P $ DH38Lch9z508gJiop3A6u0whTity390
ただし、ドキュメントに記載されている形式ではありません(MD5 + ":" + SALT):
ユーザーの資格情報をチェックしてパスワードの一致をチェックする外部スクリプトを使用しているため、これを明確にする必要があります。
私のPHPスクリプトには、データベースのパスワードからSALTを分離するコードがあります。
$parts = explode( ':', $password_database );
$crypt = $parts[0];
$salt = $parts[1];
しかし、二重の結び目がない場合、私はそれを行うことはできません(:)
これを試して、
次のコードは、Joomlaの標準パスワードを作成しています(古いバージョン1.5、1.7など)。
jimport('joomla.user.helper');
$salt = JUserHelper::genRandomPassword(32);
$crypt = JUserHelper::getCryptedPassword($password_choose, $salt);
$password = $crypt.':'.$salt;
Joomla 3.2+ PHPのパスワードアルゴリズムを導入bcryptただし、最低限必要なものPHP 5.3 +使用bcryptサーバーがPHPバージョンがこれに対応していることを確認してください 詳細はこちら 。
次の方法を使用するJoomlaの他のバージョン(Joomla 3.x)
jimport('joomla.user.helper');
$yourpass = JUserHelper::hashPassword($password_choose);
古いアルゴリズムは最新バージョンでも正常に機能します。違いは、古いバージョンでは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();
また、ユーザーの資格情報を確認する必要があり、パスワードの形式を確認する必要はなく、フレームワークの読み込み後に以下のコードを使用するだけだとおっしゃいました。
$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
}
それが役に立てば幸い..
Joomlaのデフォルトのユーザークラスは、パスワードのハッシュにソルトMD5を使用しなくなりました。 JUser
クラスのbind関数が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);
}
そしてそれはあなたがここでもっと読むことができるPHPassに今依存していることを意味します: http://www.openwall.com/phpass/ 。このサイトの紹介だけを読んだことから、暗号化はMD5ではなくbcrypt
になっていると思いますが、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);
?>
ファイルをjoomlaルートディレクトリに保存するか、JPATH_BASEを変更する必要があることに注意してください。