Какой алгоритм хэширования паролей в joomla 1.5.13 ?

Статус
В этой теме нельзя размещать новые ответы.

Sammerset

Постоялец
Регистрация
14 Сен 2008
Сообщения
134
Реакции
10
Ребята! Подскажите если кто знает.
У меня возникла проблема - я установил joomla 1.5.13 и phpBB3 3.0.5
В общем, накинул мост на них, по указаниям на следующей странице - Для просмотра ссылки Войди или Зарегистрируйся.
Всё работает, всё классно.
Но теперь я захотел установить чат (компонент) Yos Ajax Chat 1.0. Он встал превосходно, всё классно. Но при залогинивании может авторизоваться только админ и пользователи, которые регались в джуме до установки моста.
Я решил узнать в чём проблема - а проблема в том, что мост (а именно плагин)при регистрации прописывает в базе только password_clear - а это равнозначно, что ничего не прописывает. Пустое место. Привожу эту проблему:
_______________________________________________________________
PHP:
/**
	 * This method will return a user object
	 *
	 * If options['autoregister'] is true, if the user doesn't exist yet he will be created
	 *
	 * @access	public
	 * @param   array   holds the user data
	 * @param 	array   array holding options (remember, autoregister, group)
	 * @return	object	A JUser object
	 * @since	1.5
	 */
	function &_getUser($user, $options = array())
	{
		$instance = new JUser();
		if($id = intval(JUserHelper::getUserId($user['username'])))  {
			$instance->load($id);
			return $instance;
		}
		//TODO : move this out of the plugin
		jimport('joomla.application.component.helper');
		$config   = &JComponentHelper::getParams( 'com_users' );
		$usertype = $config->get( 'new_usertype', 'Registered' );
		$acl =& JFactory::getACL();
		$instance->set( 'id'			, 0 );
		$instance->set( 'name'			, $user['fullname'] );
		$instance->set( 'username'		, $user['username'] );
		$instance->set( 'password_clear'	, $user['password_clear'] );
		$instance->set( 'email'			, $user['email'] );	// Result should contain an email (check)
		$instance->set( 'gid'			, $acl->get_group_id( '', $usertype));
		$instance->set( 'usertype'		, $usertype );
		//If autoregister is set let's register the user
		$autoregister = isset($options['autoregister']) ? $options['autoregister'] :  $this->params->get('autoregister', 1);
		if($autoregister)
		{
			if(!$instance->save()) {
				return JError::raiseWarning('SOME_ERROR_CODE', $instance->getError());
			}
		} else {
			// No existing user and autoregister off, this is a temporary user.
			$instance->set( 'tmp_user', true );
		}
		return $instance;
	}
____________________________________________________________
Переменную $user['password_clear'] можно сменить на $user['password'] - и тогда в базу будет прописываться не прикрытый ничем пароль, указанный пользователем при регистрации.
Если бы это была джума 1.0.15 - тогда можно было-бы просто сделать так - md5 ($user['password']) - и всё было бы гуд.
В базу пойдёт хэш. И компонент согласован.
Проблема в джуме 1.5.13 - там не просто один мдэшник стоит.
Вопрос, господа знатоки - как зашифровать $user['password'] точно так же, как и при регистрации? (Получить нормальный хэш?)
Как, имея просто открытый пароль, закинуть его в хеш ? (joomla 1.5.13 only!!!:(bc:
 
Хеш записывается с солью, т.е. $hash=($salt.$password)
Для каждой установке джумлы генериться своя соль. Вот где она лежит точно не помню, ищи... возможно в конфиге

UPD. /configuration.php - свойство $secret
 
Кроме этого в конфиге не нашёл ничего:



PHP:
$secret = 'Am9HAaHBS4GxhNwz';

Сейчас ещё покопаюсь...
А эта самая $salt - после установки она остаётся константой что-ли? В смысле при каждой регистрации берётся одна и та же соль?

$hash=($secret.$password) - будет так, я правильно понимаю?
 
Да, все верно. Правда выше забыл еще md5. Т.е. будем md5($secret.$password)
Возможно стоит поменять местами $secret и $password, не помню точно.
Проверь на своем админском пароле.

Соль константа, да
 
У меня в базе лежит такой хэш:

173e5028d064bff633bda48601d2ec7c:mkG0FBVxAFiqGlhnshtFt7yYmuZYvUDk

Это пароль семь единиц (1111111).
Будем пробывать. :ay:

Я тут ещё одну ссылочку нарыл : - и вообще запутался, мля
Для просмотра ссылки Войди или Зарегистрируйся

Вот такой хэш получился у меня : ccba884fcea1d936340c64582f32090c при md5($pass.$salt)
и такой при md5($salt.$pass) 633512fc554dbf99f162fedfecab3a57 .

Естественно, это не 173e5028d064bff633bda48601d2ec7c:mkG0FBVxAFiqGlhnshtFt7yYmuZYvUDk.
Откуда вторая часть?
 
173e5028d064bff633bda48601d2ec7c = md5('1111111'.'mkG0FBVxAFiqGlhnshtFt7yYmuZYvUDk')

Соль все таки генерируется всегда рэндомно, сорри. И записана через двоеточие в пасворде
 
173e5028d064bff633bda48601d2ec7c = md5('1111111'.'mkG0FBVxAFiqGlhnshtFt7yYmuZYvUDk')

Сказал А - говори Б.
Откудова mkG0FBVxAFiqGlhnshtFt7yYmuZYvUDk?

А ты молодчага, я бы даже не увидел этого о_0
 
ну я же не в голове посчитал :)
Смотри, у тебя в базе написано "173e5028d064bff633bda48601d2ec7c:mkG0FBVxAFiqGlhns htFt7yYmuZYvUDk"
Видишь там двоеточие есть?
Так вот, после двоеточия mkG0FBVxAFiqGlhnshtFt7yYmuZYvUDk - это и есть соль, она генируется рэндомно, т.е. можешь в принцепи при создании пароля писать там abrakadabra (но это не безопасно).
А то что до двоеточия - это md5('1111111'.'mkG0FBVxAFiqGlhnshtFt7yYmuZYvUDk'), т.е. md5(пароль, соль)
 
Конечно же!
Я уже сгенерил пароль, надо ещё и соль прицепить.
Соль генерится такой функцией

PHP:
function getSalt($encryption = 'md5-hex', $seed = '', $plaintext = '')
	{
		// Encrypt the password.
		switch ($encryption)
		{
			case 'crypt' :
			case 'crypt-des' :
				if ($seed) {
					return substr(preg_replace('|^{crypt}|i', '', $seed), 0, 2);
				} else {
					return substr(md5(mt_rand()), 0, 2);
				}
				break;

			case 'crypt-md5' :
				if ($seed) {
					return substr(preg_replace('|^{crypt}|i', '', $seed), 0, 12);
				} else {
					return '$1$'.substr(md5(mt_rand()), 0, 8).'$';
				}
				break;

			case 'crypt-blowfish' :
				if ($seed) {
					return substr(preg_replace('|^{crypt}|i', '', $seed), 0, 16);
				} else {
					return '$2$'.substr(md5(mt_rand()), 0, 12).'$';
				}
				break;

			case 'ssha' :
				if ($seed) {
					return substr(preg_replace('|^{SSHA}|', '', $seed), -20);
				} else {
					return mhash_keygen_s2k(MHASH_SHA1, $plaintext, substr(pack('h*', md5(mt_rand())), 0, 8), 4);
				}
				break;

			case 'smd5' :
				if ($seed) {
					return substr(preg_replace('|^{SMD5}|', '', $seed), -16);
				} else {
					return mhash_keygen_s2k(MHASH_MD5, $plaintext, substr(pack('h*', md5(mt_rand())), 0, 8), 4);
				}
				break;

			case 'aprmd5' :
				/* 64 characters that are valid for APRMD5 passwords. */
				$APRMD5 = './0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';

				if ($seed) {
					return substr(preg_replace('/^\$apr1\$(.{8}).*/', '\\1', $seed), 0, 8);
				} else {
					$salt = '';
					for ($i = 0; $i < 8; $i ++) {
						$salt .= $APRMD5 {
							rand(0, 63)
							};
					}
					return $salt;
				}
				break;

			default :
				$salt = '';
				if ($seed) {
					$salt = $seed;
				}
				return $salt;
				break;
		}
	}

Это ты про неё говорил?
 
При дефолтном "md5-hex", который и у тебя юзается, соль - это просто рэндомная строка - любая!
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху