Dans le développement Web, le stockage sécurisé des mots de passe utilisateur est crucial. Bien qu'il existe plusieurs méthodes de chiffrement en PHP qui peuvent être utilisées pour la protection des mots de passe, la fonction crypte () est toujours un outil classique et efficace. Il permet aux développeurs d'utiliser différents algorithmes de hachage tels que Blowfish pour générer des chaînes cryptées irréversibles. Cet article expliquera comment combiner la fonction crypt () avec la base de données pour obtenir un stockage sécurisé de mot de passe utilisateur.
La fonction Crypt () de PHP est utilisée pour le cryptage unidirectionnel, qui accepte deux paramètres:
string crypt ( string $string , string $salt )
$ String est la chaîne d'origine à crypter (généralement un mot de passe)
$ Salt est une chaîne qui affecte le résultat de chiffrement. Différents sels produiront différents résultats de cryptage.
Pour crypter à l'aide de l'algorithme Blowfish, vous devez formater le sel, par exemple:
$salt = '$2y$10$' . bin2hex(random_bytes(11));
$hashed_password = crypt('user_password', $salt);
2 ans 10 $ Signifie l'utilisation de l'algorithme Blowfish et 10 cartouches de cryptage.
Pour stocker le mot de passe chiffré dans la base de données, un tableau utilisateur est requis. Voici une simple structure de table utilisateur:
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(50) NOT NULL UNIQUE,
password VARCHAR(255) NOT NULL
);
Utilisez ensuite PHP pour se connecter à la base de données et insérer les données utilisateur:
<?php
$pdo = new PDO("mysql:host=localhost;dbname=testdb;charset=utf8", "dbuser", "dbpass");
$username = 'testuser';
$password = 'mypassword';
// générersaltEt crypter le mot de passe
$salt = '$2y$10$' . bin2hex(random_bytes(11));
$hashed_password = crypt($password, $salt);
// Insérer dans la base de données
$stmt = $pdo->prepare("INSERT INTO users (username, password) VALUES (:username, :password)");
$stmt->execute([
':username' => $username,
':password' => $hashed_password
]);
?>
Lorsque vous vous connectez, vous ne pouvez pas simplement comparer le mot de passe en texte brut. Nous devons utiliser à nouveau la fonction crypt () avec le mot de passe crypté stocké dans la table utilisateur sous forme de sel.
<?php
$input_password = 'mypassword';
$username = 'testuser';
$stmt = $pdo->prepare("SELECT password FROM users WHERE username = :username");
$stmt->execute([':username' => $username]);
$stored_hash = $stmt->fetchColumn();
if (crypt($input_password, $stored_hash) === $stored_hash) {
echo "La vérification du mot de passe a réussi。";
} else {
echo "Mot de passe d'erreur。";
}
?>
Bien que la fonction crypte () soit sûre, elle a été progressivement remplacée par Password_Hash () et Password_verify () . Crypt () convient plus à des scénarios où une compatibilité arrière avec les anciens systèmes est nécessaire.
Cependant, assurez-vous de faire attention lorsque vous utilisez Crypt () :
Utilisez toujours de forts sels aléatoires et évitez d'utiliser des valeurs fixes.
Contrôlez le nombre de tours de chiffrement (tels que 10 des 2 $ 10 $ ) pour augmenter les coûts de fissuration par force brute.
Utilisez HTTPS pour connecter le front-end et le back-end pour empêcher l'interception du mot de passe pendant la transmission.
Évitez de passer des données sensibles dans les URL, par exemple: