Проверьте, правильно ли SHA256 хешировал пароль в mysql в форме входа не работает

Здравствуйте, у меня небольшая проблема с моим кодом. Дело в том, что на сервере minecraft пользователя просят зарегистрироваться, а затем его регистрационные данные попадают в базу данных mysql, а пароль шифруется в пользовательском хеше SHA256. Вот его алгоритм:

    String salt = randomString(length:16);
String encryptedPassword = "$SHA$" + salt + "$" + sha256(sha256(password) + salt);

Проблема в том, что мне нужно, чтобы люди заходили на мой сайт, используя этот пароль и свое имя пользователя. Но чтобы проверить это, мне нужно закодировать мой пароль и проверить, совпадают ли они. Но мой код не работает, все перепробовал. Помогите мне, пожалуйста. Спасибо!!:

    <?php
require_once 'config.php';
$mysqli = new mysqli($hostname, $user, $pass, $db4);
if ($mysqli->connect_errno) {
printf("Connect failed: %s\n", $mysqli->connect_error);
exit();
}

$name = 'name';
$password = 'password';
$v = $mysqli->query("SELECT password FROM authme WHERE username = '".$name."'");
if ($v->num_rows > 0) {
$row = $v->fetch_assoc();
echo $row['password'];
}
else {
echo 'There is no user with such name';
exit();
}
function checkPassword($password,$row['password']){
$parts = explode('$',$row['password']);
$salt = $parts[2];
$hashed = hash('sha256',hash('sha256', $password).$salt);
$hashed = '$SHA$'.$salt.'$'.$hashed;
if ($hashed == $row['password'])
{
return true;
}
else {
return false;
}
}
if (checkPassword($password, $row['password']) === true) {
echo 'OMGGGGGGGGGGGGGGGGGGGG';
}
else {
echo 'something went wrong';
}
$mysqli->close();
?>

1

Решение

function checkPassword($password, $db_password)
{
$parts = explode('$', $db_password);
$salt = $parts[2];
$hashed = hash('sha256',hash('sha256', $password).$salt);
$hashed = '$SHA$'.$salt.'$'.$hashed;
return ($hashed == $db_password) ? true : false;
}

Вы передаете одну переменную в функцию, поэтому измените все ссылки на $row['password'] что-то вроде $db_password для функции.

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]