У меня есть простой сценарий входа, написанный на 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!";
}
Итак, что я здесь делаю, я сравниваю пароль, заданный пользователем тем, который находится на сервере. Что не так?
Вот вам пример
<?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, если они равны.
hash_equals()
(возможно, с использованием function_exists()
). Более подробную информацию можно найти в этом RFC .
Убедитесь, что вы используете один и тот же хэш для вашего шифрования.
также вы должны использовать эхо на каждом этапе. Функция strcmp() хорошо работает в php.
strcmp
. Возвращает0
в случае успеха.