e1mer 100 Report post Posted June 21, 2018 (edited) С помощью данного класса можно реализовать внутриигровую + форумную регистрацию, т.е юзать один аккаунт, иногда это очень удобно. Функция, присутствующие в классе, их всего три: 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 June 24, 2018 by e1mer 2 2 Quote Share this post Link to post Share on other sites
e1mer 100 Report post Posted June 21, 2018 резервный пост, постараюсь найти свободное время и распишу про Cookies в ips. Quote Share this post Link to post Share on other sites
V3ct0r 2,116 Report post Posted June 21, 2018 @e1mer Наверно в строке return md5(md5($this->members_pass_salt).md5($this->legacyEscape($password))); $this->members_pass_salt надо заменить на $salt 1 Quote Some useful links / Полезные ссылки Tips for making a topic in 'Questions & Help' / Рекомендации по созданию тем в разделе "Помощь" Server Advertising Section Rules / Правила раздела "Реклама серверов" Available e-mail domains for registration / Допустимые e-mail домены для регистрации User groups / Группы пользователей User ranks / Звания пользователей "Broken" pictures on the forum / "Битые" изображения на форуме Beware of scammers! / Осторожно, мошенники! My developments / Мои разработки Mods for client and server / Моды для клиента и сервера PKOdev.NET website for Tales of Pirates Server / PKOdev.NET веб-обвязка для сервера Пиратии I do not provide any help in private messages and outside the forum. Use 'Questions & Help' section please. Thank you for understanding! Я не оказываю какую-либо помощь в личных сообщениях и вне форума. Пожалуйста, используйте раздел "Пиратия: Помощь". Благодарю за понимание! Share this post Link to post Share on other sites
e1mer 100 Report post Posted June 23, 2018 В 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 К сожалению не заметил, да там должна быть соль, но соль именно юзера, взятая из базы данных. Quote Share this post Link to post Share on other sites
Julio 21 Report post Posted July 5, 2018 @Wantows Quote Share this post Link to post Share on other sites