Position actuelle: Accueil> Derniers articles> Utilisez Crypt () pour implémenter un simple système d'authentification utilisateur

Utilisez Crypt () pour implémenter un simple système d'authentification utilisateur

M66 2025-05-24

Lors du développement d'un système utilisateur simple, le stockage crypté des mots de passe est l'une des fondements de la sécurité. PHP fournit une fonction de chiffrement très pratique Crypt () , qui peut nous aider à implémenter rapidement les fonctions de cryptage et de vérification de mot de passe de base. Cet article utilisera un exemple concis pour décrire comment créer un système d'authentification utilisateur simple à l'aide de la fonction crypte () .

1. Comprendre la fonction crypte ()

Crypt () est une fonction en PHP pour le chiffrement de chaîne unidirectionnel, généralement utilisé pour le cryptage des mots de passe. La syntaxe de base est la suivante:

 string crypt(string $string, string $salt)

Parmi eux, $ String est une chaîne qui doit être cryptée, et $ sel est la valeur "SALT" utilisée pour affecter les résultats de chiffrement, et prend en charge une variété d'algorithmes de chiffrement (comme Blowfish, MD5, SHA-256, SHA-512, etc.).

2. Créer une logique d'enregistrement

Lors de l'inscription, le mot de passe doit être crypté et stocké. Voici un exemple d'enregistrement simple:

 <?php
// Mot de passe entré par l&#39;utilisateur
$password = 'user_password123';

// utiliser Blowfish L&#39;algorithme génère un mot de passe de chiffrement
$hash = crypt($password, '$2y$10$' . bin2hex(random_bytes(11)));

// Simuler pour enregistrer dans la base de données
file_put_contents('users.txt', "username:$hash\n");

echo "Utilisateur enregistré,Le mot de passe est crypté et enregistré。";
?>

Ici, nous utilisons le préfixe de sel en commençant par 2 ans 10 $ , ce qui signifie l'utilisation de l'algorithme Blowfish (recommandé pour le cryptage de mot de passe). Random_Bytes (11) génère une valeur de sel aléatoire, garantissant que chaque résultat de chiffrement est différent, même si le mot de passe est le même.

3. Créer une logique de vérification de connexion

Lorsque l'utilisateur se connecte, le mot de passe entré doit être chiffré à l'aide du même sel, puis le comparer avec le hachage de mot de passe dans la base de données:

 <?php
// Entrée utilisateur
$input_username = 'username';
$input_password = 'user_password123';

// depuis“base de données”Lire des informations
$data = file('users.txt');
foreach ($data as $line) {
    list($stored_username, $stored_hash) = explode(':', trim($line));

    if ($input_username === $stored_username) {
        // utiliser存储的 hash Comme salt Crypter le mot de passe entré à nouveau
        if (crypt($input_password, $stored_hash) === $stored_hash) {
            echo "Connectez-vous avec succès,Content de te revoir $input_username!";
        } else {
            echo "Mot de passe d&#39;erreur。";
        }
        exit;
    }
}

echo "L&#39;utilisateur n&#39;existe pas。";
?>

De cette façon, même si l'attaquant vole le hachage de mot de passe, le mot de passe d'origine ne peut pas être restauré directement à partir du hachage. Dans le même temps, comme chaque utilisateur utilise un sel différent, même si plusieurs utilisateurs utilisent le même mot de passe, la valeur de hachage stockée est différente.

4. Renforcer davantage la sécurité

Bien que Crypt () puisse assurer la sécurité de base, PHP recommande d'utiliser Password_Hash () et Password_verify () à partir de 5.5. Ils utilisent toujours Crypt () en bas, mais l'encapsulation est plus complète et plus sûre.

Mais dans certains environnements restreints (comme les anciens serveurs ou systèmes qui doivent contrôler manuellement le sel), Crypt () est toujours un outil efficace.

5. Résumé

Grâce au contenu ci-dessus, nous pouvons voir qu'à l'aide de la fonction Crypt () de PHP, vous pouvez rapidement créer un simple système de vérification des utilisateurs:

  • Crypter les mots de passe et les stocker lors de l'inscription;

  • Réencryptez les mots de passe et comparez la même valeur de sel lors de la connexion;

  • Combiné avec des sels aléatoires pour augmenter la résistance au chiffrement et empêcher les attaques de table arc-en-ciel.

Bien que Password_Hash () soit plus recommandé pour les projets modernes, la compréhension du mécanisme sous-jacent de Crypt () est toujours très utile, surtout lorsque une personnalisation de bas niveau est requise.