Fonction crypt()
Définition et Utilisation
La fonction crypt() renvoie une chaîne hachée en utilisant les algorithmes DES, Blowfish ou MD5.
Cette fonction se comporte différemment selon les systèmes d'exploitation. PHP vérifie quels algorithmes sont disponibles et lesquels utiliser lors de son installation.
Le paramètre salt est optionnel. Cependant, crypt() crée un mot de passe faible sans sel. Assurez-vous de spécifier un sel suffisamment fort pour une meilleure sécurité.
Certaines constantes sont utilisées avec la fonction crypt(). La valeur de ces constantes est définie par PHP lors de son installation.
Constantes :
- [CRYPT_STD_DES] - Hachage standard basé sur DES avec un sel de deux caractères de l'alphabet "./0-9A-Za-z". L'utilisation de caractères invalides dans le sel entraînera l'échec de cette fonction.
- [CRYPT_EXT_DES] - Hachage étendu basé sur DES avec un sel de neuf caractères composé d'un trait de soulignement suivi de 4 octets de compte d'itération et de 4 octets de sel. Ceux-ci sont codés en tant que caractères imprimables, 6 bits par caractère, le caractère le moins significatif en premier. Les valeurs de 0 à 63 sont codées comme "./0-9A-Za-z". L'utilisation de caractères invalides dans le sel entraînera l'échec de la fonction.
- [CRYPT_MD5] - Hachage MD5 avec un sel de 12 caractères commençant par $1$
- [CRYPT_BLOWFISH] - Hachage Blowfish avec un sel commençant par $2a$, $2x$ ou $2y$, un paramètre de coût à deux chiffres "$", et 22 caractères de l'alphabet "./0-9A-Za-z". L'utilisation de caractères en dehors de l'alphabet entraînera le retour d'une chaîne de longueur zéro. Le paramètre "$" est le logarithme en base 2 du compte d'itération pour l'algorithme de hachage basé sur Blowfish et doit être compris entre 04 et 31. Les valeurs en dehors de cette plage entraîneront l'échec de la fonction.
- [CRYPT_SHA_256] - Hachage SHA-256 avec un sel de 16 caractères commençant par $5$. Si la chaîne de sel commence par "rounds=<N>$", la valeur numérique de N indique combien de fois la boucle de hachage doit être exécutée, un peu comme le paramètre de coût sur Blowfish. Le nombre par défaut de tours est 5000, avec un minimum de 1000 et un maximum de 999,999,999. Toute sélection de N en dehors de cette plage sera tronquée à la limite la plus proche.
- [CRYPT_SHA_512] - Hachage SHA-512 avec un sel de 16 caractères commençant par $6$. Si la chaîne de sel commence par "rounds=<N>$", la valeur numérique de N indique combien de fois la boucle de hachage doit être exécutée, un peu comme le paramètre de coût sur Blowfish. Le nombre par défaut de tours est 5000, avec un minimum de 1000 et un maximum de 999,999,999. Toute sélection de N en dehors de cette plage sera tronquée à la limite la plus proche.
Sur les systèmes où cette fonction prend en charge plusieurs algorithmes, les constantes ci-dessus sont définies sur "1" si elles sont prises en charge et "0" sinon.
Remarque : Il n'existe pas de fonction de décryptage. La fonction crypt() utilise un algorithme unidirectionnel.
Syntaxe
crypt( str,salt ) Valeurs des Paramètres
| Paramètre | Description |
|---|---|
| str | Requis. Spécifie la chaîne à hacher |
| salt | Optionnel. Une chaîne de sel sur laquelle baser le hachage |
Détails Techniques
| Valeur de Retour : | Renvoie la chaîne codée ou une chaîne qui est plus courte que 13 caractères et est garantie de différer du sel en cas d'échec |
|---|---|
| Version PHP : | 4+ |
| Journal des Modifications : | PHP 8.0 - le paramètre salt n'est plus optionnel |
Plus d'Exemples
Exemple
Dans cet exemple, nous allons tester les différents algorithmes :
<?php
// sel de 2 caractères
if (CRYPT_STD_DES == 1 )
{
echo "Standard DES: " .crypt( 'something' , 'st' ). "\n<br>" ;
}
else
{
echo "Standard DES non pris en charge.\n<br>" ;
}
// sel de 4 caractères
if (CRYPT_EXT_DES == 1 )
{
echo "Extended DES: " .crypt( 'something' , '_S4..some' ). "\n<br>" ;
}
else
{
echo "Extended DES non pris en charge.\n<br>" ;
}
// sel de 12 caractères commençant par $1$
if (CRYPT_MD5 == 1 )
{
echo "MD5: " .crypt( 'something' , '$1$somethin$' ). "\n<br>" ;
}
else
{
echo "MD5 non pris en charge.\n<br>" ;
}
// Sel commençant par $2a$. Le paramètre de coût à deux chiffres : 09. 22 caractères
if (CRYPT_BLOWFISH == 1 )
{
echo "Blowfish: " .crypt( 'something' , '$2a$09$anexamplestringforsalt$' ). "\n<br>" ;
}
else
{
echo "Blowfish DES non pris en charge.\n<br>" ;
}
// sel de 16 caractères commençant par $5$. Le nombre par défaut de tours est 5000.
if (CRYPT_SHA256 == 1 )
{
echo "SHA-256: " .crypt( 'something' , '$5$rounds=5000$anexamplestringforsalt$' ). "\n<br>" ; }
else
{
echo "SHA-256 non pris en charge.\n<br>" ;
}
// sel de 16 caractères commençant par $6$. Le nombre par défaut de tours est 5000.
if (CRYPT_SHA512 == 1 )
{
echo "SHA-512: " .crypt( 'something' , '$6$rounds=5000$anexamplestringforsalt$' );
}
else
{
echo "SHA-512 non pris en charge." ;
}
?> La sortie du code ci-dessus pourrait être (selon le système d'exploitation) :
Standard DES: stqAdD7zlbByI
Extended DES: _S4..someQXidlBpTUu6
MD5: $1$somethin$4NZKrUlY6r7K7.rdEOZ0w.
Blowfish: $2a$09$anexamplestringforsaleLouKejcjRlExmf1671qw3Khl49R3dfu
SHA-256: $5$rounds=5000$anexamplestringf$KIrctqsxo2wrPg5Ag/hs4jTi4PmoNKQUGWFXlVy9vu9
SHA-512: $6$rounds=5000$anexamplestringf$Oo0skOAdUFXkQxJpwzO05wgRHG0dhuaPBaOU/
oNbGpCEKlf/7oVM5wn6AN0w2vwUgA0O24oLzGQpp1XKI6LLQ0.