-1

如何更改joomal中新用户的密码加密。我试图修改

getSalt($encryption = 'md5-hex', $seed = '', $plaintext = '')

getCryptedPassword($plaintext, $salt = '', $encryption = 'md5-hex', $show_encrypt = false)

library.joomla.user.helper 但是通过修改这两个功能老用户无法登录!

4

1 回答 1

1

我只是查看了 Joomla 的源代码,虽然 Joomla 在技术上确实已经具备以下功能:

  1. 从各种更好的 [但不是很多] 哈希算法中选择密码存储。
  2. 在算法更改的情况下,将算法名称与哈希一起存储。

这些东西都没有在代码中实际使用过。

这意味着什么:

  1. 您只能在安装之前通过修改$encryption = 'md5-hex'这两个函数定义中的 来更改它。
  2. 在任何其他时间更改它都会使您的所有密码失效,包括管理员密码。

证据:

 $ grep -r getCryptedPassword ./*
./components/com_users/models/reset.php:                $crypted        = JUserHelper::getCryptedPassword($data['password1'], $salt);
./components/com_users/models/reset.php:                $testcrypt = JUserHelper::getCryptedPassword($data['token'], $salt);
./installation/models/configuration.php:                $crypt = JUserHelper::getCryptedPassword($options->admin_password, $salt);
./libraries/joomla/user/user.php:                       $crypt = JUserHelper::getCryptedPassword($array['password'], $salt);
./libraries/joomla/user/user.php:                               $crypt = JUserHelper::getCryptedPassword($array['password'], $salt);
./libraries/joomla/user/helper.php:     public static function getCryptedPassword($plaintext, $salt = '', $encryption = 'md5-hex', $show_encrypt = false)
./plugins/authentication/joomla/joomla.php:                     $testcrypt = JUserHelper::getCryptedPassword($credentials['password'], $salt);

您可以清楚地看到,没有一个调用getCryptedPassword()指定“加密”类型,因此始终使用函数定义中的默认值。

因此,在全新安装中,在解压缩文件和实际运行安装脚本之间,您可以将函数定义更改为:

getSalt($encryption = 'crypt-blowfish', $seed = '', $plaintext = '')
getCryptedPassword($plaintext, $salt = '', $encryption = 'crypt-blowfish', $show_encrypt = true)

这会将散列算法更改为最佳选择 [IMO],并将散列类型与密码一起存储,以便您以后可以更改算法而不会使所有旧密码失效。

想一想,如果您首先运行如下查询以指定当前算法,您可能现在就可以更改算法。

UPDATE TABLE users
SET password = CONCAT('{MD5}', password)
WHERE password NOT LIKE '{%'

但当然,您必须使用正确的表名和字段名。

于 2013-02-01T23:14:43.780 回答