При проверке пароля, функция SHA256_PassHash хеширует пароль по другому. То есть передается тот же соль и тот же пароль, но значение разное.
Код:
Логи:
Вид для печати
А ты уверен, что игрок с первого раза ввел свой пароль?
Значит либо при регистрации пароль хэшируешь неправильно, либо проверяешь неверно. Функция работает нормально.
Возьми свой пароль, соль и захэшируй их в OnGameModeInit с выводом в консоль, а после посмотри с каким из двух результатов будет совпадать
Ну логируй то, какие данные приходят в функцию до хэширования, какая получается соль и какой результат. А после смотри что попадает в БД.
Причина, скорее всего, в коде, который вызывает показанные тобой функции, а не в самих функциях
Причина оказалось в самой функции CreatePlayerPassword, точно не знаю почему pawn так повел себя (очень странно). Короче говоря, перенес весь код (т.е. цикл с созданием соля) в OnGameModeInit и логировал длину получаемого соля (создавал массив с 65 ячейками для соля, так же как и в энуменаторе игрока), длина строки оказалась 67. Не знаю как так получалось. Изменил кол-во циклов с 65 на 64, длина строки изменилась на 64 (т.е. на нормальную длину, которая должна была быть). Ну вкратце, проблема решена, но тему оставлю открытой, вдруг кто знает в чем именно заключалась моя ошибка и почему длина строки получалась в 67 символов, хотя я компилировал дебаг режимом (-d3) и с подключенным crashdetect'ом.
P.S. Крашев не было (т.е. связанных с выходом за пределы массива). Crashdetect молчал.
Код был выше, прочитай ранее сообщение и поймешь.
- - - Добавлено - - -
Для того чтобы лишние вопросы не возникали, скину код еще раз:
Логирование в OnGameModeInit:
Изменил на:PHP код:
new salt[64 + 1];
new length = strlen(random_letters);
for(new i = 0; i < 65; i++)
{
salt[i] = random_letters[random(length)];
}
printf(#%d, strlen(salt)); // выводило 67,крашев не было, выход за пределы массива тоже не было
Изменил код в CreatePlayerPassword:PHP код:
new salt[64 + 1];
new length = strlen(random_letters);
for(new i = 0; i < 64; i++)
{
salt[i] = random_letters[random(length)];
}
printf(#%d, strlen(salt)); // начал выводить 64 (длину которая должна была быть)
Проблема решена, но остается вопрос, почему же строка получалась с длиной в 67 символов?
В первоначальном цикле у тебя итерации начинались с нуля до 64 включительно. Это и было проблемой. То бишь, с тем условием цикл совершал лишнюю итерацию.