// Аккаунт на сервере найден
if ($account) {
if ($account['password'] == $l2->passwordEncrypt($this->getPassword())) {
// Аккаунта на сайте нет, создаю его так как на сервере он уже есть
if (!$siteAccount) {
$email = null;
$columnNames = $l2->getDb()
->getSchema()
->getTable('accounts')
->getColumnNames();
if (is_array($columnNames)) {
foreach ($columnNames as $column) {
if (strpos($column, 'mail') !== false && isset($account[$column])) {
$email = $account[$column];
}
}
}
// В таблице с аккаунтами нет поля с Email. Нет смысла регать дальше аккаунт на сайте
if (!$email) {
throw new Exception('Аккаунт не найден');
}
// Создаю аккаунт на сайте
$userModel = Users::create($login, $email, Users::STATUS_ACTIVATED, $lsId, Users::ROLE_DEFAULT);
$userModel->save(false);
$siteAccountUserId = $userModel->user_id;
}
$found = true;
}
}
// Аккаунт не найден
if (!$found) {
if ($siteAccountUserId) {
UsersAuthLogs::model()->addErrorAuth($siteAccountUserId);
}
$this->incrementBadAttempt();
$this->addError($attr, 'Неправильный Логин или Пароль.');
}
} catch (Exception $e) {
$this->addError('login', $e->getMessage());
}
}
#
/**
* Шифровка пароля
*
* @param $password
*
* @return string
*/
public function passwordEncrypt($password)
{
if ($this->config('password_type') == Ls::PASSWORD_TYPE_WHIRLPOOL) {
return base64_encode(hash('whirlpool', $password, true));
}
return base64_encode(pack('H*', sha1(utf8_encode($password))));
}
,
# Автоматическое создание аккаунтов
"AutoCreateAccounts" : "true",
# Шаблон для логина и пароля
"AccountTemplate" : "[A-Za-z0-9]{4,14}",
"PasswordTemplate" : "[A-Za-z0-9]{4,16}",
# Кеширование ключей
"BlowFishKeys" : "20",
"RSAKeyPairs" : "10",
# Хеш для паролей
# Поддерживаемые устаревшие методы, например sha1 (l2jserver), whirlpool (overworld)
"LegacyPasswordHash" : "sha1",
sha1:1000:BKUtFOSowxjReuJ2InqAesCMSOOmUo3q:RckmG3A/AGEG3TODiYTgsCWjz6+/UqyW
Martali, Со строками я в прошлый раз ошибся, там 209 строка, всё это я смотрел наВы не можете просматривать ссылку пожалуйста воспользуйтесь следующими ссылками Вход или Регистрация. Судя по всему у JTS не просто sha1 крипт, вы же сами кидали пароль после входа на сервер через LS:
Как видите здесь несколько параметров и все они разделены ':'Код:sha1:1000:BKUtFOSowxjReuJ2InqAesCMSOOmUo3q:RckmG3A/AGEG3TODiYTgsCWjz6+/UqyW
1. sha1
2. 1000
3. BKUtFOSowxjReuJ2InqAesCMSOOmUo3q
4. RckmG3A/AGEG3TODiYTgsCWjz6+/UqyW
Посмотрел я исходники JTS, которые у меня есть и судя по ним я могу сказать, что они используют алгоритм шифрования пароля: PBKDF2WithHmacSHA1, собственно под этот алгоритм и надо переписать код авторизации в Ghtweb. Вот и всё решение вашего вопроса.
final String passwordHash = PBKDF2Hash.createHash(password);
boolean passwordCorrect = PBKDF2Hash.validatePassword(password, account.getPasswordHash());
package org.mmocore.commons.crypt;
import java.math.BigInteger;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.io.UnsupportedEncodingException;
public class SHA1Hash {
public static String createHash(final String password)
throws NoSuchAlgorithmException, UnsupportedEncodingException {
MessageDigest digest = MessageDigest.getInstance("SHA-1");
digest.reset();
digest.update(password.getBytes("utf8"));
String sha1 = String.format("%040x", new BigInteger(1, digest.digest()));
return sha1;
}
public static boolean validatePassword(final String password, final String correctHash)
throws NoSuchAlgorithmException, UnsupportedEncodingException {
String newPasswordHash = createHash(password);
return newPasswordHash.equals(correctHash);
}
}
import org.mmocore.commons.crypt.SHA1Hash;
так я о чем и говорю жРазве для этого не достаточно будет отредактировать данный метод, и добавить новый метод хеширования паролей?
Вы не можете просматривать ссылку пожалуйста воспользуйтесь следующими ссылками Вход или Регистрация
if ($this->config('password_type') == Ls::PASSWORD_TYPE_WHIRLPOOL) {
}
algorytm : iterations : salt : hashMartali, Со строками я в прошлый раз ошибся, там 209 строка, всё это я смотрел наВы не можете просматривать ссылку пожалуйста воспользуйтесь следующими ссылками Вход или Регистрация. Судя по всему у JTS не просто sha1 крипт, вы же сами кидали пароль после входа на сервер через LS:
Как видите здесь несколько параметров и все они разделены ':'Код:sha1:1000:BKUtFOSowxjReuJ2InqAesCMSOOmUo3q:RckmG3A/AGEG3TODiYTgsCWjz6+/UqyW
1. sha1
2. 1000
3. BKUtFOSowxjReuJ2InqAesCMSOOmUo3q
4. RckmG3A/AGEG3TODiYTgsCWjz6+/UqyW
Посмотрел я исходники JTS, которые у меня есть и судя по ним я могу сказать, что они используют алгоритм шифрования пароля: PBKDF2WithHmacSHA1, собственно под этот алгоритм и надо переписать код авторизации в Ghtweb. Вот и всё решение вашего вопроса.
$password = "password"; // Пароль.
$algorytm = "sha1"; // Алгоритм хеширования.
$iterations = 1000; // Количество итераций для формирования хеша.
$salt = "BKUtFOSowxjReuJ2InqAesCMSOOmUo3q"; // Случайно сгенерированная строка. 32 символа.
$hash = hash_pbkdf2($algorytm, $password, $salt, $iterations, 32); // Хеш. 32 символа.
$result = $algorytm . ":" . $iterations . ":" . $salt . ":" . $hash; // Результат.
Да не совсем по уму, зачем выпиливать работающий функционал? Лучше расширить имеющийся.так я о чем и говорю ж
нам нужно завести новую константу в классе Ls, назвать её PASSWORD_TYPE_FOO к примеру и сделать elseif к ней, который вернет нужный нам хеш. Ну это если делать по уму. Можно вообще всё удалить и поставить return нужный хеш, тут каждый на что гораздКод:if ($this->config('password_type') == Ls::PASSWORD_TYPE_WHIRLPOOL) { }
Сонный был, лень было искать какие файлы редактировались, их там 4-5 штук. Можно думаю отследить при желании.Mex-Vision,
Зачем кидать весь архив, не проще было бы просто патч сделать?)
Соль генерируется своя для каждого пароля, именно поэтому она и храниться вместе с ним.Mex-Vision, поведение не поменялось =)
algorytm : iterations : salt : hash — может мне надо найти salt в исходниках jts сборки и его использовать в вашей правке?
Я использую proxmox-контейнеры для своих хостов. ОС Ubuntu 20.04 LTS без GUI. Когда ElectroMyStyle предложил отладку кода, я дочитался до установки xdebug пакета для моей версии Php. Но дальше этого дело не пошло. Если подскажите, какими инструментами можно собрать информацию для нахождения причины проблемы на этот раз, буду признателен.
We use cookies and similar technologies for the following purposes:
Do you accept cookies and these technologies?
We use cookies and similar technologies for the following purposes:
Do you accept cookies and these technologies?