34

jos_users外部 php スクリプト [codeignitor] からログイン チェック用の joomla ユーザー テーブルにアクセスする必要があります。

このようにパスワードを保存するjoomla

4e9e4bcc5752d6f939aedb42408fd3aa:0vURRbyY8Ea0tlvnTFn7xcKpjTFyn0YT

これは通常の MD5 ではないようで、使用できませんmd5(password)

パスワードを作成する可能な方法は何ですか?

ありがとうございました。

4

9 に答える 9

62

JoomlaのパスワードはMD5ハッシュされますが、パスワードはハッシュされる前にソルトされます。{hash}:{salt}このソルトは32文字のランダムな文字列であるため、データベースに保存されます。

したがって、新しいパスワードハッシュを作成するには、次のようにします。md5($password.$salt)

編集

さて、パスワードをチェックするために、たとえばユーザーmyguyがパスワードmypasswordを入力した場合、ユーザー名を持つデータベースから行を取得しますmyguy

この行には、と言うパスワードがあります4e9e4bcc5752d6f939aedb42408fd3aa:0vURRbyY8Ea0tlvnTFn7xcKpjTFyn0YT。パスワードハッシュとソルトを分割します。

$hashparts = preg_split (':' , $dbpassword);
echo $hashparts[0]; //this is the hash  4e9e4bcc5752d6f939aedb42408fd3aa
echo $hashparts[1]; //this is the salt  0vURRbyY8Ea0tlvnTFn7xcKpjTFyn0YT

myguyこのソルトと入力したパスワードを使用してハッシュを計算します

$userhash = md5($userpassword.$hashparts[1]); // This would be 'mypassword' and the salt used in the original hash

これ$userhash$hashparts[0]同一の場合、ユーザーは正しいパスワードを入力しました。

于 2012-05-03T09:05:57.003 に答える
22

joomlaフォーラムから、それが背後で起こっていることです:

A. Generate a password
B. Generate a string with 32 random characters
C. Concatenate Password (Step A) and RandomString (Step B)
D. Take md5(Result of Step C)
E. store Step D Result : Step B Result

例:

Generate a password - Let 'testing'
Generate a string of 32 random characters - 'aNs1L5PajsIscupUskaNdPenustelsPe'
Concatenate Password and random string - testingaNs1L5PajsIscupUskaNdPenustelsPe
md5(Step C Result) - 5cf56p85sf15lpyf30c3fd19819p58ly
store step d:step B - 5cf56p85sf15lpyf30c3fd19819p58ly:aNs1L5PajsIscupUskaNdPenustelsPe

次のようなコードをJoomlaで見つけることができます

$salt = JUserHelper::genRandomPassword(32);
$crypt = JUserHelper::getCryptedPassword("testing", $salt);
$password = $crypt . ':' . $salt;

または私たちは言うことができます

password DB field = md5(password + salt) + ":" + salt 

salt はランダムな 32 文字の文字列です。

ありがとう

于 2012-05-03T09:20:46.713 に答える
5

joomla標準では、次の方法を使用してパスワードを作成できます

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

あなたはあなたが外部ファイル(またはプログラム)からアクセスしていると言います、そしてあなたが反対側にjoomlaをインストールしているならあなたはjoomla構造の外からそれにアクセスすることができます。

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();
于 2012-05-03T09:34:52.723 に答える
3

使えませんでしpreg_splitたが、ちゃんと使えexplodeました。

$hashparts = explode (':' , $dbpassword);
于 2013-06-10T09:45:20.143 に答える
2

ジュムラ!PhPassを使用します。

root/libraries/phpass/PasswordHash.php

ここを見てください。ここでは、パスワードがどのように生成されているかを確認できます。

$2yは、 bcrypt ハッシュのデフォルト (および優先) プレフィックスです。コードに関しては、内部JUserHelper's hashPasswordverifyPasswordメソッドを調べて、Joomla が現在どのように機能しているかを確認する必要があります。


参考文献 -

https://github.com/joomla/joomla-cms/blob/3.4.1/libraries/joomla/user/helper.php#L296-L387

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

https://docs.joomla.org/API15:JUserHelper/getSalt

リンクを確認してください。お役に立てば幸いです:)

于 2016-03-02T09:47:46.180 に答える
0
<?php
$r = bin2hex(mcrypt_create_iv(16, MCRYPT_DEV_URANDOM));
$p = 'the_password';

$s = $p . $r;
$m = md5($s);

$out = $m . ':' . $r;
echo $out;

1バイトが2バイトになるため、bin2hexは文字サイズを2倍にするため、Len 16

于 2016-06-30T19:10:46.360 に答える
0

Joomla は、「通常の」md5 でパスワードを「理解」します。

私が過去に行ったこと (ユーザーのログインをテストするため) は、元のパスワードを保存し、md5 で新しいパスワードを暗号化し、データベースでそれを置き換え、ブラウザーでテスト (および動作) することでした。完了したら、元のパスワードをデータベースに貼り付けます。

于 2012-05-03T09:03:34.260 に答える