Maison  >  Article  >  développement back-end  >  Parlons de la fonction d'implémentation de PHP salt (Salt)

Parlons de la fonction d'implémentation de PHP salt (Salt)

PHPz
PHPzoriginal
2023-03-29 11:34:401074parcourir

La sécurité des mots de passe est quelque chose que nous devons prendre en compte lors du développement. Nous pouvons utiliser des algorithmes de hachage pour garantir la sécurité des mots de passe. Les algorithmes de hachage couramment utilisés incluent SHA1 et MD5. Cependant, ces algorithmes de hachage ne sont pas sécurisés à 100 % car ces algorithmes sont publics et les pirates peuvent utiliser diverses techniques pour les pirater.

Afin d'améliorer la sécurité des mots de passe, nous pouvons utiliser la méthode du "salting". Le salage consiste à ajouter une chaîne aléatoire de caractères à un mot de passe, puis à le hacher. De cette façon, les pirates doivent connaître la valeur du sel pour déchiffrer le mot de passe, ce qui améliore considérablement la sécurité du mot de passe.

Ensuite, implémentons une fonction de salage PHP pour protéger notre mot de passe.

Étape 1 : Générer une valeur de sel aléatoire

En PHP, vous pouvez utiliser la fonction mt_rand() pour générer une valeur de sel aléatoire. Le premier paramètre de la fonction mt_rand() est la valeur de départ et le deuxième paramètre est la valeur de fin. Le code suivant montre comment générer une valeur de sel aléatoire de longueur 8 :

$salt = '';
for ($i = 0; $i < 8; $i++) {
    $salt .= chr(mt_rand(33, 126));
}

Dans le code ci-dessus, nous bouclons 8 fois, en utilisant à chaque fois la fonction mt_rand() pour générer un nombre aléatoire avec un code ASCII compris entre 33 et 126 , puis utilisez la fonction chr() pour convertir le nombre aléatoire en caractères et l'insérer dans la chaîne $salt.

Étape 2 : Concaténer le mot de passe et la valeur salt

Maintenant que nous avons obtenu une valeur salt aléatoire, nous devons concaténer la valeur salt et le mot de passe saisi par l'utilisateur, puis le hacher. Le code suivant montre comment concaténer le mot de passe et la valeur salt :

$salted_password = $salt . $password;

Dans le code ci-dessus, $password est le mot de passe saisi par l'utilisateur.

Étape 3 : Hachez le mot de passe et le sel

Ensuite, nous devons hacher la chaîne concaténée. En PHP, vous pouvez utiliser la fonction sha1() ou md5() pour hacher une chaîne. Le code suivant montre comment hacher les mots de passe et les valeurs salt :

$hashed_password = sha1($salted_password);

Dans le code ci-dessus, nous utilisons la fonction sha1() pour hacher $salted_password, et la valeur de hachage générée est $hashed_password.

Étape 4 : Enregistrez la valeur salt et la valeur de hachage dans la base de données

Maintenant que nous avons salé et haché avec succès le mot de passe saisi par l'utilisateur, nous devons ensuite enregistrer la valeur salt et la valeur de hachage dans la base de données. Lors de la connexion, nous devons comparer le mot de passe saisi par l'utilisateur avec la valeur de hachage dans la base de données pour déterminer si le mot de passe est correct. Le code ci-dessous montre comment enregistrer les valeurs de sel et de hachage dans la base de données :

// 将盐值和哈希值保存到数据库
$sql = "INSERT INTO users (username, salt, hash) VALUES ('$username', '$salt', '$hashed_password')";

Dans le code ci-dessus, nous avons enregistré $username, $salt et $hashed_password dans la base de données.

Étape 5 : Vérifiez si le mot de passe est correct

Lors de la connexion, nous devons comparer le mot de passe saisi par l'utilisateur avec la valeur de hachage dans la base de données pour déterminer si le mot de passe est correct. Le code ci-dessous montre comment vérifier si le mot de passe est correct :

// 获取数据库中保存的盐值和哈希值
$sql = "SELECT salt, hash FROM users WHERE username = '$username'";
$result = mysqli_query($conn, $sql);
$row = mysqli_fetch_assoc($result);
$salt = $row['salt'];
$hashed_password = $row['hash'];

// 将用户输入的密码和盐值拼接起来,并进行哈希
$salted_password = $salt . $password;
$hashed_password_check = sha1($salted_password);

// 检查哈希值是否相等
if ($hashed_password_check === $hashed_password) {
    // 密码正确
} else {
    // 密码错误
}

Dans le code ci-dessus, nous obtenons d'abord le sel et la valeur de hachage enregistrés dans la base de données, puis hachons le mot de passe et la valeur de sel saisis par l'utilisateur. Enfin, on vérifie si les hachages sont égaux, si c'est le cas, le mot de passe est correct, sinon le mot de passe est erroné.

Résumé

Dans cet article, nous avons présenté la méthode de salage PHP, qui peut être utilisée pour améliorer la sécurité des mots de passe. En générant une valeur de sel aléatoire et en concaténant la valeur de sel et le mot de passe pour le hachage, la difficulté de déchiffrer le mot de passe peut être considérablement augmentée. Dans le développement réel, nous pouvons appliquer cette méthode au processus d'enregistrement et de connexion des utilisateurs pour protéger le mot de passe de l'utilisateur.

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