PHP salt et hash SHA256 pour le mot de passe de connexion

j'ai fait le cryptage du mot de passe dans mon script d'enregistrement et ils sont stockés dans la base de données, et je dois les utiliser pour me connecter, donc je voudrais utiliser les non cryptés pour se connecter. J'ai lu les discussions ici, mais rien ne m'aide. Comment puis-je l'ajouter dans mon login.le php? Le sel est également stocké dans la base de données.

C'est mon registre.script php pour le chiffrement

$hash = hash('sha256', $password1);

function createSalt()
{
    $text = md5(uniqid(rand(), TRUE));
    return substr($text, 0, 3);
}

$salt = createSalt();
$password = hash('sha256', $salt . $hash);

et ceci est mon login.php avec la saison

//Create query
$qry="SELECT * FROM member WHERE username='$username' AND password='$password'";
$result=mysql_query($qry);

//Check whether the query was successful or not
if($result) {
    if(mysql_num_rows($result) > 0) {
        //Login Successful
        session_regenerate_id();
        $member = mysql_fetch_assoc($result);
        $_SESSION['SESS_MEMBER_ID'] = $member['id'];
        $_SESSION['SESS_FIRST_NAME'] = $member['username'];
        $_SESSION['SESS_LAST_NAME'] = $member['password'];
        session_write_close();
        header("location: profile.php");
        exit();
    }
    else {
        //Login failed
        //error message 
    }
else {
    die("Query failed");
}
21
demandé sur Simon_says 2013-12-24 20:34:37

5 réponses

ces exemples sont de php.net. Grâce à vous, je viens également d'apprendre à propos des nouvelles fonctions de hachage php.

Lire la documentation php pour connaître les possibilités et les meilleures pratiques: http://www.php.net/manual/en/function.password-hash.php

Save un hachage de mot de passe:

$options = [
    'cost' => 11,
];
// Get the password from post
$passwordFromPost = $_POST['password'];

$hash = password_hash($passwordFromPost, PASSWORD_BCRYPT, $options);

// Now insert it (with login or whatever) into your database, use mysqli or pdo!

Obtenir le hash du mot de passe:

// Get the password from the database and compare it to a variable (for example post)
$passwordFromPost = $_POST['password'];
$hashedPasswordFromDB = ...;

if (password_verify($passwordFromPost, $hashedPasswordFromDB)) {
    echo 'Password is valid!';
} else {
    echo 'Invalid password.';
}
39
répondu andreas 2014-01-04 22:12:51

Exemple pour stocker le mot de passe:

$hashPassword = password_hash("password", PASSWORD_BCRYPT);

Exemple pour vérifier le mot de passe:

$passwordCorrect = password_verify("password", $hashPassword);

2
répondu anguswild 2016-12-22 13:39:14

vous n'avez pas pu vous connecter parce que vous n'avez pas reçu le texte solt approprié au moment de la connexion. Il y a deux options, la première est de définir sel statique, la seconde est si vous voulez créer sel dynamique que vous devez stocker le sel quelque part (moyens dans la base de données) avec associer à l'utilisateur. Que vous concaténez l'utilisateur solt+password_hash chaîne maintenant avec ceci vous lancez la requête avec le nom d'utilisateur dans votre table de base de données.

0
répondu Nikunj 2014-07-16 10:17:37
array hash_algos(void)

echo hash('sha384', 'Message to be hashed'.'salt');

Voici un lien à une référence http://php.net/manual/en/function.hash.php

0
répondu Ngend Lio 2015-12-15 02:19:49

vous ne pouvez pas faire cela parce que vous ne pouvez pas connaître le sel à un moment précis. Ci-dessous, un code qui fonctionne en théorie (non testé pour le syntaxe)

<?php
$password1 = $_POST['password'];
$salt      = 'hello_1m_@_SaLT';
$hashed    = hash('sha256', $password1 . $salt);
?>

quand vous insérez:

$qry="INSERT INTO member VALUES('$username', '$hashed')";

Et pour récupérer de l'utilisateur :

$qry="SELECT * FROM member WHERE username='$username' AND password='$hashed'";
-2
répondu Flo354 2013-12-24 16:45:50