Jump to content
Sign in to follow this  
e1mer

IPS класс (IPS+AccountServer)

Recommended Posts

С помощью данного класса можно реализовать внутриигровую + форумную регистрацию, т.е юзать один аккаунт, иногда это очень удобно.

 

Функция, присутствующие в классе, их всего три:

  • generateSalt() - Генерирует ключ шифрования 
  • legacyEscape() - Необходимо для старых версий IP.Board
  • encryptedPassword() -  Шифрование пароля, именно эту функцию мы и будем разбирать.

 

В функцию encryptedPassword передаются два параметра, пароль в чистом виде и ключ шифрования, так называемая "соль".

Далее функция сложит все данные в одну строчку, предварительно установив между паролем и солью семь символов ($2a$13$), примерно получится вот так:

 

  • пароль$2a$13$соль

Далее функция хэширует с помощью стандартного алгоритма UNIX, получается вот так:

  • $2a$13$h3jQKRpUAhlpwawzMrmbhu3mxlaVM9YPNtlyjs5QvYMhY9q0teqJm
  • admin$2a$13$h3jQKRpUAhlpwawzMrmbhz

 

Как вариант можно пропатчить IPS\Member\Member.php и сделать единую регистрацию с форума, а можно юзать этот класс и внедрить уже в вашу серверную обвязку регистрацию и авторизацию.

 

 

Сам класс для работы на вашей обвязке:

class ips {
	public function generateSalt() {
		$salt = '';
		for ( $i=0; $i<22; $i++ ) {
			do {
				$chr = rand( 48, 122 );
			}
			while ( in_array( $chr, range( 58,  64 ) ) or in_array( $chr, range( 91,  96 ) ) );
			$salt .= chr( $chr );
		}
		return $salt;
	}
	
	public static function legacyEscape( $val ) {
    	$val = str_replace( "&"			, "&"         , $val );
    	$val = str_replace( "<!--"		, "<!--"  , $val );
    	$val = str_replace( "-->"		, "-->"       , $val );
    	$val = str_ireplace( "<script"	, "<script"   , $val );
    	$val = str_replace( ">"			, ">"          , $val );
    	$val = str_replace( "<"			, "<"          , $val );
    	$val = str_replace( '"'			, """        , $val );
    	$val = str_replace( "\n"		, "<br />"        , $val );
    	$val = str_replace( "$"			, "$"        , $val );
    	$val = str_replace( "!"			, "!"         , $val );
    	$val = str_replace( "'"			, "'"         , $val );
    	$val = str_replace( "\\"		, "\"        , $val );
    	return $val;
	}
	
	public function encryptedPassword($password, $salt)
	{
		if (mb_strlen($salt) === 22) {
			return crypt($password,'$2a$13$'.$salt);
		} else {
			return md5(md5($salt).md5($this->legacyEscape($password)));
		}
	}
}

 

Edited by e1mer
  • Like 2
  • Thanks 2

Share this post


Link to post
Share on other sites

резервный пост, постараюсь найти свободное время и распишу про Cookies в ips.

Share this post


Link to post
Share on other sites

@e1mer

 

Наверно в строке 

return md5(md5($this->members_pass_salt).md5($this->legacyEscape($password)));

$this->members_pass_salt надо заменить на $salt

  • Like 1

Share this post


Link to post
Share on other sites
В 21.06.2018 в 19:12, Stinger сказал:

Я кончено уважаю чужой труд , но есть вопрос , зачем это ? Те кто юзают IPS, им это не надо , а те кто не шарят от этого куска кода ничего не получат , это как вырвать страницу из книги. Даже не объяснил , как это подключить и сделать , что бы это заработало. Многие тут даже в Lua,  трудности находят , а ты хочешь , что бы PHP учили. Вот как простой человек должен понять это ? $ips->legacyEscape($val) и это проще понять , чем понять как это подключить. Вообщем если ты реально хочешь помочь кому то, распиши подробно. И не расценивай это как вызов , это просто предложение.

Я понял.

 

В 21.06.2018 в 22:02, V3ct0r сказал:

@e1mer

 

Наверно в строке 


return md5(md5($this->members_pass_salt).md5($this->legacyEscape($password)));

$this->members_pass_salt надо заменить на $salt

К сожалению не заметил, да там должна быть соль, но соль именно юзера,  взятая из базы данных.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this  

×
×
  • Create New...