Генерировать пароль пользователя phpBB
У меня есть игровой сервер, работающий на том же сервере, что и форум phpBB.
Я хочу, чтобы пользователи проверяли свою личность на игровом сервере, вводя свое имя пользователя и пароль phpBB.
Я знаю, как сделать это с их именем пользователя (просто получите их имя пользователя и сравните его с полем "имя пользователя" в базе данных SQL).
Однако я не уверен, как зашифровать введенный пароль, чтобы сравнить его с полем "user_password". Если для этого требуется md5, я бы предпочел использовать функцию md5() в SQL, но я могу сделать это вне SQL.
1 ответ
Очевидно, phpBB использует phpass для управления паролями. Это на самом деле довольно хорошо, так как это означает, что есть хороший шанс, что вы используете стандартный алгоритм хэширования паролей, такой как bcrypt, под прикрытием. Bcrypt считается очень сильным.
Чтобы выяснить, совпадает ли пароль с зашифрованным хэшем, вы (логически) извлекаете закодированную строку хеша, получаете параметр стоимости и его значение, а затем проверяете, если (когда вы применяете алгоритм bcrypt к представленному паролю, стоимость и соль) это приводит к тем же самым фактическим байтов хеша, как вы получили. Это вычислительно дорого (и сам алгоритм хеширования сложен, если вы реализуете с нуля, что, как предполагается, вы не делаете), но это не так уж логично для внешнего мира.
Возможно, стоит поместить код для проверки в PHP и проверки с помощью локального вызова веб-службы, поскольку тогда вы можете легко использовать существующий код (например, вы можете точно соответствовать обработке пользовательских учетных данных). Вероятно, сделайте страницу, которая просто возвращает "текущее" имя пользователя после обработки входа в систему, и сделайте так, чтобы клиент не поддерживал состояние сеанса. (Это должно быть тривиально.) Возможно, вам следует подумать о том, чтобы заблокировать страницу от доступа с компьютера и добавить некоторое ограничение скорости (например, только один ответ на пользователя с этой специальной страницы в 10 секунд) как что делает непрактичными всякие неприятные уловки.