Как сделать солевой хэш с помощью PHP для регистрации новой учетной записи из Интернета?

Каким должен быть алгоритм PHP для аутентификации учетной записи AzerothCore (создать соль и верификатор) после поля sha_pass_hash >был удален?

Раньше мы использовали:

$sha_pass_hash = getPasswordHash($account_name, $password);

Как это работает сейчас? Как сделать соль и верификатор для регистрации нового аккаунта?

Может ли кто-нибудь предоставить подробную инструкцию с примером?


person Bogir    schedule 24.03.2021    source источник


Ответы (1)


Я только что сделал для acore-cms здесь https://github.com/azerothcore/acore-cms/pull/20/files

Я даже выкладываю для беглого просмотра код для расчета пароля с солью:

function CalculateSRP6Verifier($username, $password, $salt)
{
    // algorithm constants
    $g = gmp_init(7);
    $N = gmp_init('894B645E89E1535BBDAD5B8B290650530801B18EBFBF5E8FAB3C82872A3E9BB7', 16);

    // calculate first hash
    $h1 = sha1(strtoupper($username . ':' . $password), TRUE);

    // calculate second hash
    $h2 = sha1($salt.$h1, TRUE);

    // convert to integer (little-endian)
    $h2 = gmp_import($h2, 1, GMP_LSW_FIRST);

    // g^h2 mod N
    $verifier = gmp_powm($g, $h2, $N);

    // convert back to a byte array (little-endian)
    $verifier = gmp_export($verifier, 1, GMP_LSW_FIRST);

    // pad to 32 bytes, remember that zeros go on the end in little-endian!
    $verifier = str_pad($verifier, 32, chr(0), STR_PAD_RIGHT);

    return $verifier;
}

Не забудьте установить библиотеку php-gmp.

Если вам нужно создать учетную запись, вы можете использовать это для создания соли:

// generate a random salt
$salt = random_bytes(32);

Этот код сильно вдохновлен CMS MasterKing32.

person Stefano Borzì    schedule 24.03.2021