密码验证 - 不一致的哈希值

时间:2013-03-11 00:24:40

标签: authentication joomla md5 joomla1.5

我正在从Joomla 1.5迁移到WordPress,我的客户端不希望用户重新注册。所以我正在编写一个WordPress插件,将用户的密码与jos_users表中的内容相匹配,然后相应地更新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。

任何人都可以想到我应该寻找替代加密可能性的地方吗?

我不知道在哪里查看或为什么此特定用户帐户似乎加密不同。

1 个答案:

答案 0 :(得分:1)

在Joomla标准中加密处理如下。

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

您可以通过将整个joomla框架加载到root中的单个文件来在单独的文件中运行比较。

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。

希望这可能会有所帮助..