Описание:
Вычисляет хеш сумму из указанной строки. Несмотря на своё название, функция может хешировать любые строки, а не только пароли.
Есть возможность указать
соль для защиты от атак с помощью
радужных таблиц.
Параметры:
password[] - входная строка.
salt[] - соль для хеширования.
ret_hash[] - строковая переменная, в которой будет записана хеш-сумма.
ret_hash_len - размер переменной ret_hash (в ячейках).
Возвращаемое значение:
Функция всегда возвращает 1. Также возвращает хеш-сумму, вычисленную из входной строки и соли, в виде строки в параметре ret_hash.
Примечания:- Функция была добавлена в SA:MP 0.3.7 R2.
- В 0.3.7 R2 функция иногда выдавала неправильные результаты. Баг был исправлен только в версии R2-1, версией R2 лучше не пользоваться.
- Массив, в котором будет сохранена хеш-сумма, должен быть размером не менее 64 ячеек + 1 ячейка под завершающий нуль-символ в строке (итого 65 ячеек), иначе увеличится риск подбора хешируемой строки злоумышленником, у которого окажется ваша база данных с хешами. При урезании хеша возникнет больше вариантов строк, хеш-суммы которых совпадают, при этом для успешной атаки достаточно подобрать хотя бы один из таких вариантов. По сути каждая недостающая ячейка в массиве с хэшем упрощает процесс взлома в 16 раз.
- При хешировании паролей игроков рекомендуется использовать соль, уникальную для каждого игрока. Если у двух аккаунтов будут одинаковые пароли и злоумышленник узнает хеш от одного из этих паролей, второй пароль придётся подбирать отдельно, т.к. с уникальной солью хеши будут разными.
Например, можно случайным образом сгенерировать строку под соль при регистрации игрока, хешировать пароль с полученной солью и сохранить хеш и соль в данных аккаунта.
Также можно генерировать новую соль при каждой смене пароля игроком.
- Соль добавляется после хешируемой строки. Например, если на вход подаётся строка "01234567" и соль "abc", хеш будет вычислен из строки "01234567abc".
Пример использования:
/**
* Проверяет правильность введённого игроком пароля.
* @param password[] - пароль
* @param expected_hash[] - хеш-сумма от пароля, сохранённая в аккаунте при регистрации игрока
* @param salt[] - соль, используемая при хешировании
**/
bool:CheckPassword(password[], expected_hash[], salt[])
{
/* вычислим хеш-сумму из пароля и соли */
new hash[64+1];
/* если strcmp вернёт 0 - хеши совпадают, а значит пароль верный */
return bool:(!strcmp(hash
, expected_hash
, false)); }
См. также:
Статью подготовил: Daniel_Cortez
Копирование данной статьи на других ресурсах без разрешения автора запрещено.