Position actuelle: Accueil> Derniers articles> Stockage crypte () dans le mot de passe de chiffrement de la base de données

Stockage crypte () dans le mot de passe de chiffrement de la base de données

M66 2025-06-02

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.

1. Comprendre l'utilisation de base de la fonction crypte ()

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.

2. Connectez-vous à la base de données et stockez le mot de passe crypté

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
]);
?>

3. Vérifiez le mot de passe de l'utilisateur

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&#39;erreur。";
}
?>

4. Sécurité Suggestions supplémentaires

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 () :

  1. Utilisez toujours de forts sels aléatoires et évitez d'utiliser des valeurs fixes.

  2. Contrôlez le nombre de tours de chiffrement (tels que 10 des 2 $ 10 $ ) pour augmenter les coûts de fissuration par force brute.

  3. Utilisez HTTPS pour connecter le front-end et le back-end pour empêcher l'interception du mot de passe pendant la transmission.

  4. Évitez de passer des données sensibles dans les URL, par exemple: