Fonction PHP crypt()
❮ Référence de chaîne PHP
Définition et utilisation
La fonction crypt() renvoie une chaîne hachée à l'aide des algorithmes DES, Blowfish ou MD5.
Cette fonction se comporte différemment sur différents systèmes d'exploitation. PHP vérifie quels algorithmes sont disponibles et quels algorithmes utiliser lorsqu'il est installé.
Le paramètre sel est facultatif. 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 à deux caractères de l'alphabet "./0-9A-Za-z". L'utilisation de caractères non valides dans le sel entraînera l'échec de cette fonction.
- [CRYPT_EXT_DES] - Hachage basé sur DES étendu avec un sel de neuf caractères composé d'un trait de soulignement suivi de 4 octets de nombre d'itérations et de 4 octets de sel. Ceux-ci sont codés sous forme de caractères imprimables, 6 bits par caractère, le caractère le moins significatif en premier. Les valeurs 0 à 63 sont encodées sous la forme "./0-9A-Za-z". L'utilisation de caractères non valides 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 renvoi par cette fonction d'une chaîne de longueur nulle. Le paramètre "$" est le logarithme en base 2 du nombre d'itérations pour l'algorithme de hachage Blowfish sous-jacent 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 est utilisée pour indiquer 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 de tours par défaut est de 5 000, il y a un minimum de 1 000 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 est utilisée pour indiquer 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 de tours par défaut est de 5 000, il y a un minimum de 1 000 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 sur "0" dans le cas contraire.
Remarque : Il n'y a pas de fonction de décryptage. La fonction crypt() utilise un algorithme unidirectionnel.
Syntaxe
crypt(str,salt)
Valeurs des paramètres
Parameter | Description |
---|---|
str | Required. Specifies the string to be hashed |
salt | Optional. A salt string to base the hashing on |
Détails techniques
Valeur de retour : | Renvoie la chaîne encodée ou une chaîne de moins de 13 caractères et qui est garantie d'être différente du sel en cas d'échec |
---|---|
Version PHP : | 4+ |
Journal des modifications : | PHP 5.6.0 - Affiche un avertissement de sécurité E_NOTICE si le sel est omis. PHP 5.3.7 - Ajout des modes $2x$ et $2y$ Blowfish. PHP 5.3.2 - Ajout de SHA-256 et SHA-512. Le comportement fixe de Blowfish sur les tours invalides renvoie la chaîne "échec" ("* 0" ou "* 1"), au lieu de revenir à DES. PHP 5.3.0 - PHP contient désormais sa propre implémentation pour MD5 crypt, Standard DES, Extended DES et les algorithmes Blowfish et l'utilisera si le système ne prend pas en charge un ou plusieurs des algorithmes. |
Plus d'exemples
Exemple
Dans cet exemple nous allons tester les différents algorithmes :
<?php
// 2 character salt
if (CRYPT_STD_DES == 1)
{
echo "Standard DES: ".crypt('something','st')."\n<br>";
}
else
{
echo "Standard DES not supported.\n<br>";
}
// 4 character salt
if (CRYPT_EXT_DES == 1)
{
echo "Extended DES: ".crypt('something','_S4..some')."\n<br>";
}
else
{
echo "Extended DES not supported.\n<br>";
}
// 12 character salt starting with $1$
if (CRYPT_MD5 == 1)
{
echo "MD5: ".crypt('something','$1$somethin$')."\n<br>";
}
else
{
echo "MD5 not supported.\n<br>";
}
// Salt starting with $2a$. The two digit cost parameter: 09. 22 characters
if (CRYPT_BLOWFISH == 1)
{
echo "Blowfish: ".crypt('something','$2a$09$anexamplestringforsalt$')."\n<br>";
}
else
{
echo "Blowfish DES not supported.\n<br>";
}
// 16 character salt starting with $5$. The default number of rounds is 5000.
if (CRYPT_SHA256 == 1)
{
echo "SHA-256: ".crypt('something','$5$rounds=5000$anexamplestringforsalt$')."\n<br>"; }
else
{
echo "SHA-256 not supported.\n<br>";
}
// 16 character salt starting with $6$. The default number of rounds is 5000.
if (CRYPT_SHA512 == 1)
{
echo "SHA-512: ".crypt('something','$6$rounds=5000$anexamplestringforsalt$');
}
else
{
echo "SHA-512 not supported.";
}
?>
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.
❮ Référence de chaîne PHP