的Joomla密码加密的Joomla密码加密(joomla password encryption)

2019-05-13 18:51发布

我需要访问的Joomla用户表jos_users用于登录从外部PHP脚本[codeignitor]检查。

的Joomla存储密码,这样

4e9e4bcc5752d6f939aedb42408fd3aa:0vURRbyY8Ea0tlvnTFn7xcKpjTFyn0YT

看起来这是不正常的MD5,所以我不能使用md5(password)

什么是可能的方式来创建密码?

谢谢。

Answer 1:

的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]是相同的用户输入正确的密码。



Answer 2:

从的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 

当盐是随机的字符32字符串。

谢谢



Answer 3:

在标准的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();


Answer 4:

我不能使用preg_splitexplode效果很好。

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


Answer 5:

从的Joomla源文件库/的Joomla /地穴/密码/ 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;


    }
}


Answer 6:

的Joomla! 使用PhPass。

root/libraries/phpass/PasswordHash.php

这里有一个看看。 你会看到这里的密码是如何产生。

$ 2Y为默认值(和首选)前缀的bcrypt哈希值 。 至于代码,你会想看看里面JUserHelper's hashPasswordverifyPassword方法怎么看Joomla的,现在用的东西的工作。


有些Referances -

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

检查的联系,我希望你它会有所帮助:)



Answer 7:

的Joomla“理解”与“正常”的MD5密码。

我已经在过去(测试用户的登录)完成的,是为了保存原始密码,加密的MD5一个新的,在数据​​库中替换它,用浏览器中测试它(和它的作品),当我是完成后,粘贴在数据库中的原始密码。



Answer 8:

如果你只是使用MD5($密码); 它会工作,试试吧。 的Joomla有一个机制,它可以与多种类型的密码的工作(包括迟,强密码)。 你不必担心冒号后的部分。 只要使用MD5($密码),它肯定会工作。

顺便说一句,这也将会对的Joomla 3.x的工作



Answer 9:

<?php
$r = bin2hex(mcrypt_create_iv(16, MCRYPT_DEV_URANDOM));
$p = 'the_password';

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

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

莱恩16因为BIN2HEX加倍的字符尺寸,由于1个字节变成2个字节



文章来源: joomla password encryption