Fonction crypt() PHP
Définition et utilisation
La fonction crypt() retourne une chaîne cryptée en utilisant les algorithmes DES, Blowfish ou MD5.
Le comportement de la fonction diffère d'un système d'exploitation à l'autre, certains systèmes d'exploitation supportent plusieurs types d'algorithme. Lors de l'installation, PHP vérifie quels algorithmes sont disponibles et lesquels utiliser.
L'algorithme spécifique dépend du format et de la longueur du paramètre sel. Le sel, en augmentant le nombre de chaînes générées par une méthode de cryptage spécifique, rend le cryptage plus sécurisé.
Voici quelques constantes utilisées avec la fonction crypt(). Ces valeurs de constantes sont définies par PHP lors de l'installation.
Constantes :
[CRYPT_SALT_LENGTH] | Longueur de cryptage par défaut. Utilise le cryptage DES standard, longueur de 2. |
[CRYPT_STD_DES] | Le hash basé sur l'algorithme standard DES utilise deux caractères de "./0-9A-Za-z" comme sel. L'utilisation de caractères illégaux dans le sel entraîne l'échec de crypt(). |
[CRYPT_EXT_DES] | Hash basé sur l'algorithme DES étendu. Le sel est une chaîne de 9 caractères, composée d'un trait d'union suivi de 4 octets de nombre de répétitions et de 4 octets de sel. Ils sont codés en caractères imprimables, chaque caractère de 6 bits, avec la priorité donnée aux bits valides les plus faibles. De 0 à 63 sont codés en "./0-9A-Za-z". L'utilisation de caractères illégaux dans le sel entraîne l'échec de crypt(). |
[CRYPT_MD5] | L'hashage MD5 utilise une chaîne de caractères de 12 caractères commençant par $1$ pour le salage. |
[CRYPT_BLOWFISH] | L'algorithme Blowfish utilise le salage suivant : "$2a$", un paramètre cost à deux chiffres, "$" et une chaîne de 64 bits composée des caractères de "./0-9A-Za-z". L'utilisation de caractères en dehors de cette gamme dans le salage entraînera un retour d'une chaîne de caractères vide par crypt(). Les deux chiffres cost sont le logarithme en base 2 du nombre d'itérations, leur gamme est de 04-31. Le dépassement de cette gamme entraînera l'échec de crypt(). |
CRYPT_SHA256 | L'algorithme SHA-256 utilise une chaîne de caractères de 16 caractères commençant par $5$ pour l'hashage. Si la chaîne de caractères de salage commence par "rounds=<N>$", la valeur numérique de N est utilisée pour spécifier le nombre d'itérations de l'hashage, ce qui est similaire au paramètre cost de l'algorithme Blowfish. Le nombre d'itérations par défaut est de 5000, le minimum est de 1000 et le maximum est de 999,999,999. Les valeurs de N au-delà de cette gamme sont converties en valeurs les plus proches. |
CRYPT_SHA512 | L'algorithme SHA-512 utilise une chaîne de caractères de 16 caractères commençant par $6$ pour l'hashage. Si la chaîne de caractères de salage commence par "rounds=<N>$", la valeur numérique de N est utilisée pour spécifier le nombre d'itérations de l'hashage, ce qui est similaire au paramètre cost de l'algorithme Blowfish. Le nombre d'itérations par défaut est de 5000, le minimum est de 1000 et le maximum est de 999,999,999. Les valeurs de N au-delà de cette gamme sont converties en valeurs les plus proches. |
Sur les systèmes qui prennent en charge plusieurs algorithmes, si les constantes mentionnées ci-dessus sont prises en charge, elle est définie sur "1", sinon sur "0".
Commentaires :Il n'existe pas de fonction de déchiffrement correspondante. La fonction crypt() utilise un algorithme à sens unique.
Syntaxe
crypt(str,salt)
Paramètres | Description |
---|---|
str | Obligatoire. Définit la chaîne de caractères à encoder. |
salt | Optionnel. Utilisé pour augmenter le nombre de caractères codés pour rendre le codage plus sûr. Si le paramètre salt n'est pas fourni, PHP génère un salage aléatoire à chaque appel de la fonction. |
Détails techniques
Valeur de retour : | Retourne une chaîne de caractères chiffrée ou une chaîne de caractères inférieure à 13 caractères, pour que le résultat soit distinct de la valeur de salage en cas d'échec. |
Version PHP : | 4+ |
Journal des mises à jour
Version | Description |
---|---|
5.3.2 | Based on Ulrich Drepper's implementation, added crypt based on SHA-256 algorithm and SHA-512 algorithm. |
5.3.2 | Fixed the issue with the Blowfish algorithm due to illegal loops, returning the "failed" string ("*0" or "*1") instead of switching to the DES algorithm. |
5.3.0 | PHP now includes its own MD5 Crypt implementation, including standard DES algorithm, extended DES algorithm, and Blowfish algorithm. If the system lacks the corresponding implementation, PHP will use its own implementation. |
Instance
Example 1
In this example, we will test different algorithms:
<?php // 2 characters salt if (CRYPT_STD_DES == 1) { echo "Standard DES: ".crypt('something','st')."\n<br>"; } else { echo "Standard DES not supported.\n<br>"; } // 4 characters salt if (CRYPT_EXT_DES == 1) { echo "Extended DES: ".crypt('something','_S4..some')."\n<br>"; } else { echo "Extended DES not supported.\n<br>"; } // With $1$ starting 12 characters if (CRYPT_MD5 == 1) { echo "MD5: ".crypt('something','$1$somethin$')."\n<br>"; } else { echo "MD5 not supported.\n<br>"; } // With Salt starting with $2a$. Double-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>"; } // Salt de 16 caractères commençant par $5$. Le nombre par défaut est de 5000. if (CRYPT_SHA256 == 1) { echo "SHA-256: ".crypt('something','$5$rounds=5000$anexamplestringforsalt$')."\n<br>"; else { echo "SHA-256 not supported.\n<br>"; } // Salt de 16 caractères commençant par $5$. Le nombre par défaut est de 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 (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.