PHP strcmp не сравнивается должным образом

0

У меня есть простой сценарий входа, написанный на php, и когда я запускаю его, предполагается сравнить 2 хэша паролей от eachother. Вот код im using;

$UUID = $_POST['UUID'];
$pass = $_POST['pass'];

// finds the same user where the uuid is the same as the one given in the post request
$query  = "SELECT * FROM users WHERE UUID = '$UUID'";
$result = mysql_query($query) or die(mysql_error());

//gets the info
while($row = mysql_fetch_assoc($result)) {
    $Password = $row['UUIDPass']; // gets the hashed password from the server
    $salt = $row['salt']; // gets the salt from the server
}

// hashes the given password with the salt from the MYSQL server
$passcheck = hash("sha256", $pass . $salt);

// checks if the hashed password above is the same as the hash in the server
if (strcmp($Password, $passcheck))
{
    echo "Correct!";
}
else
{
    echo "Something went wrong!";
}

Итак, что я здесь делаю, я сравниваю пароль, заданный пользователем тем, который находится на сервере. Что не так?

  • 0
    попробуйте с помощью trim () if (strcmp (trim ($ Password), trim ($ passcheck))) или попробуйте повторить оба результата одинаковы
  • 2
    Пожалуйста, прочитайте документацию по strcmp . Возвращает 0 в случае успеха.
Показать ещё 6 комментариев
Теги:
string
webserver

2 ответа

2
Лучший ответ

Вот вам пример

<?php

    if(strcmp("Hello","Hello"))
    {
      echo "Match";
    }
    else
    {
       echo "No Match";
    }
?>

Говорит " No Match потому что ваш чек был неправильным, потому что возвращаемое значение при успехе было 0, вы должны использовать

if(strcmp("Hello","Hello")==0)

Это также можно подтвердить из самого руководства

зЬгстр

Возвращает <0, если str1 меньше str2; > 0, если str1 больше str2 и 0, если они равны.

  • 0
    Стоит отметить, что для сравнения хешированных паролей следует использовать или хотя бы рассмотреть новую hash_equals() (возможно, с использованием function_exists() ). Более подробную информацию можно найти в этом RFC .
-2

Убедитесь, что вы используете один и тот же хэш для вашего шифрования.
также вы должны использовать эхо на каждом этапе. Функция strcmp() хорошо работает в php.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню