我需要访问的Joomla用户表jos_users
用于登录从外部PHP脚本[codeignitor]检查。
的Joomla存储密码,这样
4e9e4bcc5752d6f939aedb42408fd3aa:0vURRbyY8Ea0tlvnTFn7xcKpjTFyn0YT
看起来这是不正常的MD5,所以我不能使用md5(password)
。
什么是可能的方式来创建密码?
谢谢。
我需要访问的Joomla用户表jos_users
用于登录从外部PHP脚本[codeignitor]检查。
的Joomla存储密码,这样
4e9e4bcc5752d6f939aedb42408fd3aa:0vURRbyY8Ea0tlvnTFn7xcKpjTFyn0YT
看起来这是不正常的MD5,所以我不能使用md5(password)
。
什么是可能的方式来创建密码?
谢谢。
的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]
是相同的用户输入正确的密码。
从的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字符串。
谢谢
在标准的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();
我不能使用preg_split
但explode
效果很好。
$hashparts = explode (':' , $dbpassword);
从的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;
}
}
的Joomla! 使用PhPass。
root/libraries/phpass/PasswordHash.php
这里有一个看看。 你会看到这里的密码是如何产生。
该$ 2Y为默认值(和首选)前缀的bcrypt哈希值 。 至于代码,你会想看看里面JUserHelper's
hashPassword
和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
检查的联系,我希望你它会有所帮助:)
的Joomla“理解”与“正常”的MD5密码。
我已经在过去(测试用户的登录)完成的,是为了保存原始密码,加密的MD5一个新的,在数据库中替换它,用浏览器中测试它(和它的作品),当我是完成后,粘贴在数据库中的原始密码。
如果你只是使用MD5($密码); 它会工作,试试吧。 的Joomla有一个机制,它可以与多种类型的密码的工作(包括迟,强密码)。 你不必担心冒号后的部分。 只要使用MD5($密码),它肯定会工作。
顺便说一句,这也将会对的Joomla 3.x的工作
<?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个字节