web-dev-qa-db-ja.com

joomlaパスワード暗号化

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

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

_4e9e4bcc5752d6f939aedb42408fd3aa:0vURRbyY8Ea0tlvnTFn7xcKpjTFyn0YT
_

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

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

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

34
Red

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

新しいパスワードハッシュを作成するには、md5($password.$salt)を実行します

[〜#〜] edit [〜#〜]

パスワードを確認するために、ユーザー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]_が同一である場合、ユーザーは正しいパスワードを入力しています。

62
klennepette

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文字の文字列です。

ありがとう

23
Er. Anurag Jain

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();
5
Jobin Jose

preg_splitは使用できませんでしたが、explodeはうまく機能します。

$hashparts = explode (':' , $dbpassword);
3
jayadevkv

Joomla! PhPassを使用します。

root/libraries/phpass/PasswordHash.php

こちらをご覧ください。パスワードの生成方法が表示されます。

$ 2yは、bcryptハッシュのデフォルト(および優先)プレフィックスです 。コードについては、JUserHelper'shashPasswordおよびverifyPasswordメソッドを使用して、現在の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

リンクを確認してください。参考になることを願っています:)

2
Joomler

Joomlaソースファイルlibrary/joomla/crypt/password/simple.phpからは、複数の保存方法があり、「:」文字がないものもあります。

    switch ($type)
    {
        case '$2a$':
        case JCryptPassword::BLOWFISH:
            if (JCrypt::hasStrongPasswordSupport())
            {
                $type = '$2y$';
            }
            else
            {
                $type = '$2a$';
            }

            $salt = $type . str_pad($this->cost, 2, '0', STR_PAD_LEFT) . '$' . $this->getSalt(22);

            return crypt($password, $salt);

        case JCryptPassword::MD5:
            $salt = $this->getSalt(12);

            $salt = '$1$' . $salt;

            return crypt($password, $salt);

        case JCryptPassword::JOOMLA:
            $salt = $this->getSalt(32);

            return md5($password . $salt) . ':' . $salt;


    }
}
2
Sam Adamsh

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

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

0
jackJoe

Md5($ password)を使用する場合;動作します、試してみてください。 Joomlaにはメカニズムがあり、複数のタイプのパスワード(最近の強力なパスワードを含む)で動作できます。コロンの後の部分について心配する必要はありません。 md5($ password)を使用するだけで、確実に機能します。

ところで、これはJoomla 3.xでも動作します。

0
itoctopus
<?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

0
user2312578