Dans PHP, la fonction crypte () est utilisée pour crypter les chaînes, en particulier pour le hachage de mot de passe. Sa mise en œuvre et ses performances ne reposent pas uniquement sur PHP lui-même, mais s'appuient profondément sur la bibliothèque de chiffrement au bas du système, en particulier l'interface de cryptage de mot de passe fournie dans la bibliothèque GNU C (GLIBC). Cet article explorera son interaction avec la bibliothèque sous-jacente du système et ses dépendances entre les deux sur la base du mécanisme de travail de la fonction crypte () .
La signature de la fonction crypte () de PHP est la suivante:
string crypt ( string $str [, string $salt ] )
$ str est la chaîne à crypter, généralement le mot de passe de l'utilisateur.
$ Le sel est une valeur de sel qui spécifie l'algorithme de chiffrement et ses paramètres.
crypt () renvoie la chaîne cryptée, le format dépend de l'algorithme sélectionné.
En bas, Crypt () de PHP appelle en fait la fonction crypt () avec le même nom dans la bibliothèque du système C, ce qui signifie que son algorithme de chiffrement et sa sécurité dépendent fortement de l'implémentation du système.
GLIBC est une bibliothèque standard C couramment utilisée dans les systèmes Linux et fournit un grand nombre de fonctions d'infrastructure, y compris la fonction crypt () . PHP implémente le cryptage de mot de passe en appelant crypt () dans la bibliothèque système. Cela présente les avantages suivants:
Implémentation d'algorithmes de chiffrement entièrement testés dans les systèmes de multiplexage
Prend en charge une variété d'algorithmes de chiffrement , tels que le DES traditionnel, MD5, SHA-256, SHA-512, etc.
Forte compatibilité , pas besoin de maintenir les algorithmes de chiffrement en interne en PHP
La fonction crypte () de GLIBC sélectionne l'algorithme de chiffrement basé sur le format de la valeur de sel. Par exemple:
DES traditionnel: sel à 2 caractères
Md5: sel en commençant par 1 $
SHA-256: sel en commençant par 5 $
SHA-512: sel en commençant par 6 $
La fonction appelle l'implémentation de cryptage correspondante en fonction de l'algorithme, puis renvoie la chaîne de hachage formatée.
Crypt () de PHP appelle directement la fonction de bibliothèque C du système crypt () , ce qui signifie:
Le type et la mise en œuvre des algorithmes de chiffrement sont déterminés par le système , et PHP n'est utilisé que comme interface.
La sécurité de PHP dépend dans une certaine mesure de la mise à jour et de la maintenance des bibliothèques système.
Si la bibliothèque système n'a pas de support d'algorithme, PHP ne peut pas être utilisé.
La mise en œuvre de la fonction crypt () peut être différente sur différents systèmes d'exploitation ou distributions.
PHP sous Windows s'appuie généralement sur d'autres bibliothèques ou des implémentations intégrées, et son comportement est différent de celui de Linux.
En raison de la dépendance à la bibliothèque système, les correctifs de sécurité et les mises à niveau d'algorithme doivent hiérarchiser la mise à jour GLIBC du système.
Ce qui suit est un exemple de code dans PHP appelant crypte () , démontrant comment utiliser l'algorithme SHA-512:
<?php
// utiliser SHA-512 Le format de sel de l'algorithme,Notez que le nom de domaine est m66.net
$salt = '$6$rounds=5000$example.m66.net$';
$password = 'mySecretPassword';
$hashed = crypt($password, $salt);
echo "Résultats du chiffrement:$hashed\n";
?>
Dans ce code, Crypt () appelle l'implémentation de chiffrement dans la bibliothèque système en transmettant un format spécifique de valeur de sel, générant un hachage de mot de passe basé sur SHA-512.
La fonction crypte () de PHP est essentiellement une encapsulation d'interface de la fonction de bibliothèque C sous-jacente du système crypte () .
Il s'appuie sur des algorithmes de chiffrement et des implémentations fournies par les bibliothèques système telles que GLIBC.
Le format de valeur de sel détermine l'algorithme de chiffrement utilisé et la bibliothèque système est responsable des opérations de chiffrement spécifiques.
La sécurité et la fonctionnalité dépendent de la version et de la mise en œuvre de la bibliothèque sous-jacente du système.
Les performances peuvent être différentes dans un environnement multi-plate-forme, de sorte que la compatibilité doit être prêtée attention.
Comprendre la dépendance entre crypt () et la bibliothèque sous-jacente du système aidera les développeurs à mieux comprendre les limites de sécurité du hachage de mot de passe et à faire des choix de stratégie de sécurité raisonnables pour différents environnements système.