recherche

Maison  >  Questions et réponses  >  le corps du texte

Comment hacher et vérifier les mots de passe à l'aide de la fonction password_hash de PHP

<p>Dernièrement, j'ai essayé d'implémenter ma propre sécurité sur un script de connexion que j'ai trouvé sur Internet. En essayant d'apprendre un script sur la façon de générer un sel pour chaque utilisateur, je suis tombé sur <code>password_hash</code>. </p> <p>D'après ce que j'ai compris (d'après la lecture de cette page), lorsque vous utilisez <code>password_hash</code>, le sel est déjà généré dans la ligne. est-ce réel? </p> <p>J'ai une autre question, est-il sage d'utiliser deux sels ? L’un est stocké directement dans le fichier et l’autre est stocké dans la base de données ? De cette façon, si quelqu'un casse le sel dans la base de données, vous avez toujours un sel dans le fichier. J'ai lu ici que ce n'est jamais une bonne idée de conserver du sel, mais cela me laisse toujours perplexe quand les gens disent cela. </p>
P粉011684326P粉011684326464 Il y a quelques jours629

répondre à tous(2)je répondrai

  • P粉896751037

    P粉8967510372023-08-18 17:37:32

    Oui, vous l'avez bien compris, la fonction password_hash() va automatiquement générer un sel et l'inclure dans la valeur de hachage générée. Il est parfaitement correct de stocker le sel dans la base de données, cela fonctionnera même s'il est connu.

    // 为在数据库中存储的新密码生成哈希值。
    // 该函数会自动生成一个密码学安全的盐。
    $hashToStoreInDb = password_hash($_POST['password'], PASSWORD_DEFAULT);
    
    // 检查输入的登录密码的哈希值是否与存储的哈希值匹配。
    // 盐和成本因素将从$existingHashFromDb中提取。
    $isPasswordCorrect = password_verify($_POST['password'], $existingHashFromDb);

    Le deuxième sel que vous avez mentionné (le sel stocké dans le fichier) est en fait une clé côté chili ou serveur. Si vous l'ajoutez avant le hachis (tout comme le sel), alors vous avez ajouté un piment. Mais il existe un meilleur moyen : vous pouvez d'abord calculer la valeur de hachage, puis chiffrer la valeur de hachage à l'aide de la clé côté serveur (cryptage bidirectionnel). De cette façon, vous pourrez changer la clé si nécessaire.

    Contrairement au sel, cette clé doit rester secrète. Les gens sont souvent confus et essaient de cacher le sel, mais il est préférable de laisser le sel faire son travail et d'utiliser la clé pour ajouter le secret.

    répondre
    0
  • P粉422227023

    P粉4222270232023-08-18 10:36:51

    Utiliser password_hash est la méthode recommandée pour stocker les mots de passe. Ne les stockez pas séparément dans la base de données et les fichiers.

    Supposons que nous ayons l'entrée suivante :

    $password = $_POST['password'];

    Hachez d'abord le mot de passe par :

    $hashed_password = password_hash($password, PASSWORD_DEFAULT);

    Ensuite, visualisez le résultat :

    var_dump($hashed_password);

    Comme vous pouvez le constater, il a été haché. (Je suppose que vous avez terminé ces étapes).

    Stockez maintenant ce mot de passe haché dans votre base de données. Assurez-vous que la colonne de votre mot de passe est suffisamment grande pour accueillir la valeur de hachage (au moins 60 caractères ou plus) . Lorsqu'un utilisateur demande une connexion, vous pouvez vérifier si le hachage dans la base de données correspond au mot de passe saisi via :

    // 查询数据库获取用户名和密码
    // ...
    
    if(password_verify($password, $hashed_password)) {
        // 如果密码输入与数据库中的哈希密码匹配
        // 做一些操作,你懂的... 登录他们。
    } 
    
    // 否则,将他们重定向回登录页面。

    Document officiel de référence

    répondre
    0
  • Annulerrépondre