0

Joomla 1.5 から WordPress に移行していますが、クライアントはユーザーの再登録を望んでいません。そのため、ユーザーのパスワードを jos_users テーブルの内容と一致させ、それに応じて WordPress の情報を更新する WordPress プラグインを作成しています。

Joomla のパスワード認証についてこれまでに読んだことはすべて、getCryptedPassword 関数を示しています。

http://docs.joomla.org/API15:JUserHelper/getCryptedPassword

私のプラグインは、ユーザーが同じ方法で入力したものを暗号化しています:

$db_password = explode(':', $query); //what's in the password field of jos_users
$salt = $db_password[1];
$string_to_be_hashed = $user_entered_pass . $salt; 
$test_pass = md5($string_to_be_hashed);
$test_pass = $test_pass . ":" . $salt;
if($test_pass = query){echo "success"}

これを使用して 3 つのアカウントをテストしましたが、認証されているのは 2 つだけです。

具体的には: md5($password$salt):$salt != データベースのパスワード値

データベースでは、機能していないアカウントのパスワード値は、同じ暗号化と同じ形式 ([md5hash]:salt) を使用しているようです。クライアントのサイトにログインできるので、パスワードが正しいことはわかっています。

さらに、Joomla コードベース全体で getCryptedPassword 関数を検索しました。いずれの場合も、明示的な暗号化方式は送信されません。コードとドキュメントの両方で、デフォルトで md5 が使用されることが示されています。

代替の暗号化の可能性を探すべき場所を誰か考えられますか?

他にどこを見ればいいのか、この特定のユーザー アカウントが異なる方法で暗号化されているように見える理由がわかりません。

4

1 に答える 1

1

Joomla標準では、暗号化は次のように処理されます。

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

joomlaフレームワーク全体をルートの単一ファイルにロードすることにより、別のファイルで比較を実行できます。

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();

また、Joomla のパスワードを解読することはできません。パスワード (原文) がわかっている場合は、wordpress のパスワード fromat で試してください。

これが役立つことを願っています..

于 2013-03-11T03:38:08.863 に答える