0

我正在使用 Joomla 2.5 开发一个网站。我已经为上述父站点添加了另一个示例站点。从这个子站点,我将向数据库添加新用户。但这两个站点使用不同的方法来加密密码。

我在网上找到了 Joomla 加密的东西,但它似乎不起作用。

function genRandomPassword($length=32) 
{
$salt       = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
$makepass   = '';
mt_srand(10000000*(double)microtime());
for ($i = 0; $i < $length; $i++)
    $makepass .= $salt[mt_rand(0,61)];
return $makepass;
}

    if ( strlen($_POST['pwd']) > 100 )
    {
        $_POST['pwd'] = substr( $_POST['pwd'], 0, 100 );
    }

    $salt = genRandomPassword();
    $pass= md5(stripslashes($_POST['pwd']).$salt) .':'.$salt;

这不是方法还是我在哪里做错了?

谢谢

4

3 回答 3

3

我找到了答案:A. 用户输入密码 - 'testing'

B. 从您为该用户保存的数据库记录中获取:5cf56p85sf15lpyf30c3fd19819p58ly:aNs1L5PajsIscupUskaNdPenustelsPe

C. 将用户密码与记录的第二部分连接起来(从步骤 -> testingaNs1L5PajsIscupUskaNdPenustelsPe

D.生成步骤C的MD5

E. 将步骤 C 的结果与步骤 B 的第一部分记录 (5cf56p85sf15lpyf30c3fd19819p58ly) 进行比较,如果相同则表示用户输入了正确的密码

于 2013-11-14T13:30:08.000 回答
1

终于找到了路;认为这会帮助别人:)

    if ( strlen($_POST['pwd']) > 100 )
     {
        $_POST['pwd'] = substr( $_POST['pwd'], 0, 100 );
     }

     $salt = genRandomPassword();
    //$pass is the encripted password
     $pass= md5(stripslashes($_POST['pwd']).$salt) .':'.$salt;

哈希生成如下:

    function genRandomPassword($length = 32)
    {
     $salt = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
     $len = strlen($salt);
     $makepass = '';
     mt_srand(10000000 * (double) microtime());

     for ($i = 0; $i < $length; $i ++) {
        $makepass .= $salt[mt_rand(0, $len -1)];
     }

     return $makepass;
    }
于 2013-01-31T10:12:46.327 回答
1

我不认为我们可以在新的 joomla 版本中获得盐分。joomla 不再使用用“:”分隔密码和盐的模式。

我必须使用 joomla 用户名和密码从外部源登录用户。这适用于 2.5.24(因为我在使用这个版本时工作过。希望它也适用于 joomla 3.xx)

我正在使用名为的函数中的以下代码执行此登录功能

onUserAuthenticate($credentials, $options, &$response)

这就是我用于登录用户的方式:

 // Get a database object
$db   = JFactory::getDbo();
$query   = $db->getQuery(true);

$query->select('id, password');
$query->from('#__users');
$query->where('username=' . $db->Quote($credentials['username']). 'OR email=' . $db->Quote($credentials['username'])) ;

$db->setQuery( $query );
$result = $db->loadObject();

//######################



if ($result)
{
   $match = JUserHelper::verifyPassword($credentials['password'], $result->password, $result->id);
      if ($match === true)
   {
      $user = JUser::getInstance($result->id); // Bring this in line with the rest of the system
      // echo 'here'; print_r($user);die('xxxxxssyyyyyyeeeeesssss');
      $response->email = $user->email;
      $response->fullname = $user->name;

      if (JFactory::getApplication()->isAdmin())
      {
         $response->language = $user->getParam('admin_language');
      }
      else
      {
         $response->language = $user->getParam('language');
      }
      $response->status = JAuthentication::STATUS_SUCCESS;
      $response->error_message = '';
   }
}

希望这对某人有帮助!

于 2014-09-04T13:15:57.090 回答