Maison  >  Article  >  développement back-end  >  Explication détaillée de la sécurité des mots de passe dans PHP Password Hashing

Explication détaillée de la sécurité des mots de passe dans PHP Password Hashing

墨辰丷
墨辰丷original
2018-05-26 11:10:571708parcourir

Cet article présente principalement l'explication détaillée du hachage de mot de passe en PHP. Les amis intéressés peuvent s'y référer. J'espère qu'il sera utile à tout le monde.

Si vous utilisez toujours le cryptage md5, il est recommandé de jeter un œil aux méthodes de cryptage et de vérification des mots de passe ci-dessous.

Regardons d'abord un exemple simple de hachage de mot de passe :

<?php

//require &#39;password.php&#39;;
/**
 * 正确的密码是secret-password
 * $passwordHash 是hash 后存储的密码
 * password_verify()用于将用户输入的密码和数据库存储的密码比对。成功返回true,否则false
 */
$passwordHash = password_hash(&#39;secret-password&#39;, PASSWORD_DEFAULT);
echo $passwordHash;
if (password_verify(&#39;bad-password&#39;, $passwordHash)) {
  // Correct Password
  echo &#39;Correct Password&#39;;
} else {
  echo &#39;Wrong password&#39;;
  // Wrong password
}

Le code ci-dessous fournit une classe d'utilisateur simulée complète. Dans cette classe, en utilisant le hachage de mot de passe, le mot de passe de l'utilisateur peut être traité en toute sécurité et prendre en charge l'évolution des exigences de sécurité à l'avenir.

<?php
class User
{
  // Store password options so that rehash & hash can share them:
  const HASH = PASSWORD_DEFAULT;
  const COST = 14;//可以确定该算法应多复杂,进而确定生成哈希值将花费多长时间。(将此值视为更改算法本身重新运行的次数,以减缓计算。)

  // Internal data storage about the user:
  public $data;

  // Mock constructor:
  public function __construct() {
    // Read data from the database, storing it into $data such as:
    // $data->passwordHash and $data->username
    $this->data = new stdClass();
    $this->data->passwordHash = &#39;dbd014125a4bad51db85f27279f1040a&#39;;
  }

  // Mock save functionality
  public function save() {
    // Store the data from $data back into the database
  }

  // Allow for changing a new password:
  public function setPassword($password) {
    $this->data->passwordHash = password_hash($password, self::HASH, [&#39;cost&#39; => self::COST]);
  }

  // Logic for logging a user in:
  public function login($password) {
    // First see if they gave the right password:
    echo "Login: ", $this->data->passwordHash, "\n";
    if (password_verify($password, $this->data->passwordHash)) {
      // Success - Now see if their password needs rehashed
      if (password_needs_rehash($this->data->passwordHash, self::HASH, [&#39;cost&#39; => self::COST])) {
        // We need to rehash the password, and save it. Just call setPassword
        $this->setPassword($password);
        $this->save();
      }
      return true; // Or do what you need to mark the user as logged in.
    }
    return false;
  }
}

Ce qui précède est l'intégralité du contenu de cet article, j'espère qu'il sera utile à l'étude de chacun.


Recommandations associées :

Auth utilise Salt et mot de passe pour les exemples d'authentification des utilisateurs

Explication détaillée de Laravel utilisant salt et mot de passeAuthentification en modifiant Auth

Modification de Laravel Auth à l'aide de salt et mot de passe Explication détaillée pour l'authentification des utilisateurs

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn