Position actuelle: Accueil> Derniers articles> Comment extraire et vérifier la partie sel dans la fonction crypte () de PHP en utilisant substr ()?

Comment extraire et vérifier la partie sel dans la fonction crypte () de PHP en utilisant substr ()?

M66 2025-07-20

Dans PHP, la fonction crypt () est un outil de hachage de mot de passe couramment utilisé qui utilise le "sel" spécifié pour améliorer la sécurité des mots de passe. La fonction du sel est d'augmenter l'aléatoire du hachage et d'empêcher les attaques de table arc-en-ciel. Comprendre comment extraire et vérifier le sel à partir de hachages générés par la fonction crypt () est une partie importante de la maîtrise de la sécurité du traitement des mots de passe.

Cet article présentera comment extraire la partie SALT de la valeur de retour de Crypt () en utilisant la fonction substr () de PHP et en effectuer une vérification simple.

Qu'est-ce que le sel?

Le sel est une chaîne aléatoire combinée avec le mot de passe d'origine lorsqu'il est chiffré. Il garantit que même si les mots de passe des deux utilisateurs sont les mêmes, les valeurs de hachage générées sont différentes.

Dans la fonction crypte () , le format et la longueur du sel varient en fonction de l'algorithme de chiffrement, par exemple:

  • Des : 2 caractères de sel

  • MD5 : Commencez par 1 $ , suivi d'un sel de 8 caractères maximum

  • Blowfish : Commencez avec 2A $ ou 2 $ $ , suivi d'un facteur de coût à deux chiffres et d'un sel de 22 caractères

Comment extraire du sel avec substr ()

Supposons que vous utilisez l'algorithme MD5, son format de sel est le suivant:

 $1$ + 8Caractère de caractère

Par exemple, une valeur de hachage MD5 typique:

 $hash = crypt('password', '$1$abcdefgh$');

Le hachage retourné pourrait être:

 $1$abcdefgh$ZxR0LnxZPbQ5Cj7JlYiGp0

Le sel est les 12 premiers caractères: 1 $ ABCDEFGH $

Extraire un exemple d'échantillon de sel avec substr ()

 <?php
$hash = crypt('password', '$1$abcdefgh$');

// La longueur du sel extrait est12Personnages
$salt = substr($hash, 0, 12);

echo "Le sel extrait est: " . $salt;
?>

Vérifiez que le sel répond au format attendu

Nous pouvons vérifier que le sel extrait répond aux attentes grâce à des expressions régulières. Par exemple, l'expression régulière du sel MD5:

 /^(\$1\$[\.\/0-9a-zA-Z]{1,8}\$)$/

Exemple de code:

 <?php
$salt = substr($hash, 0, 12);

if (preg_match('/^\$1\$[\.\/0-9a-zA-Z]{1,8}\$/', $salt)) {
    echo "Format de sel correct";
} else {
    echo "Format de sel incorrect";
}
?>

Exemples complets

Voici un exemple complet qui comprend la génération de hachage, l'extraction de sel et la vérification du sel:

 <?php
$password = 'mypassword';

// utiliser MD5 L&#39;algorithme génère du sel($1$ + 8Personnages aléatoires + $)
$salt = '$1$' . substr(strtr(base64_encode(random_bytes(6)), '+', '.'), 0, 8) . '$';

// Générer du hachage
$hash = crypt($password, $salt);

echo "Hachage généré: $hash\n";

// Extraire le sel du hachage
$extracted_salt = substr($hash, 0, 12);

echo "Sel extrait: $extracted_salt\n";

// Vérifiez le format de sel
if (preg_match('/^\$1\$[\.\/0-9a-zA-Z]{1,8}\$/', $extracted_salt)) {
    echo "La vérification du format de sel est passée\n";
} else {
    echo "La vérification du format de sel a échoué\n";
}
?>

Résumer

  • Le format de sel de la fonction crypt () est lié à l'algorithme de chiffrement, avec différentes longueurs et structures.

  • Utilisez substr () pour extraire facilement la partie sel du hachage.

  • La vérification du format de sel avec des expressions régulières peut garantir que le sel répond aux exigences de l'algorithme de chiffrement et améliore la sécurité.