PHP crypt()Fonctions


PHP String 参考手册Manuel de référence des chaînes PHP

Définition et utilisation

La fonction crypt() renvoie une chaîne chiffrée à l'aide des algorithmes DES, Blowfish ou MD5.

Le comportement de cette fonction varie selon les systèmes d'exploitation, et certains systèmes d'exploitation prennent en charge plus d'un type d'algorithme. Lors de l'installation, PHP vérifie quels algorithmes sont disponibles et quel algorithme utiliser.

L'algorithme exact dépend du format et de la longueur du paramètre salt. Le salt peut rendre le chiffrement plus sûr en augmentant le nombre de chaînes générées par une chaîne spécifique combinée à une méthode de chiffrement spécifique.

Voici quelques constantes utilisées avec la fonction crypt(). Ces valeurs de constantes sont définies par PHP au moment de l'installation.

Constantes :

  • [CRYPT_SALT_LENGTH] - Longueur de chiffrement par défaut. Avec le chiffrement DES standard, la longueur est 2.
  • [CRYPT_STD_DES] - Le chiffrement standard basé sur DES a un salt de 2 caractères issu de l'alphabet "./0-9A-Za-z". L'utilisation de caractères non valides dans le salt entraînera l'échec de la fonction.
  • [CRYPT_EXT_DES] - Le chiffrement étendu basé sur DES a un salt de 9 caractères, composé de 1 underscore, suivi de 4 octets de compteur d'itérations et de 4 octets de salt. Ceux-ci sont encodé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 salt entraînera l'échec de la fonction.
  • [CRYPT_MD5] - Le chiffrement MD5 utilise un salt de 12 caractères, commençant par $1$.
  • [CRYPT_BLOWFISH] - Le chiffrement Blowfish a un salt commençant par $2a$, $2x$ ou $2y$, un paramètre de coût à deux chiffres "$", et 22 caractères issus de l'alphabet "./0-9A-Za-z". L'utilisation de caractères hors de l'alphabet entraînera le retour d'une chaîne de longueur 0 par la fonction. Le paramètre "$" est le logarithme en base 2 du nombre d'itérations pour l'algorithme de hachage basé sur Blowfish et doit être compris entre 04 et 31. Des valeurs en dehors de cette plage entraîneront l'échec de la fonction.
  • [CRYPT_SHA_256] - Le chiffrement SHA-256 utilise 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 le nombre de fois que la boucle de hachage est exécutée, de manière similaire au paramètre de coût dans Blowfish. Le nombre de tours par défaut est de 5000, le minimum est de 1000 et le maximum est de 999 999 999. Toute valeur de N en dehors de cette plage sera convertie en la valeur limite la plus proche.
  • [CRYPT_SHA_512] - Le chiffrement SHA-512 utilise 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 le nombre de fois que la boucle de hachage est exécutée, de manière similaire au paramètre de coût dans Blowfish. Le nombre de tours par défaut est de 5000, le minimum est de 1000 et le maximum est de 999 999 999. Toute valeur de N en dehors de cette plage sera convertie en la valeur limite la plus proche.

Sur les systèmes où cette fonction prend en charge plusieurs algorithmes, les constantes ci-dessus sont définies à « 1 » si elles sont prises en charge, sinon à « 0 ».

Remarques :Il n'existe pas de fonction de déchiffrement correspondante. La fonction crypt() utilise un algorithme à sens unique.


Syntaxe

crypt(str,salt)

Parameters Description
str Requis. Spécifie la chaîne à encoder.
salt Facultatif. Une chaîne utilisée pour augmenter le nombre de caractères encodés, rendant l'encodage plus sécurisé. Si le paramètre salt n'est pas fourni, une valeur aléatoire est générée à chaque appel de la fonction.

Détails techniques

Valeur de retour : Retourne la chaîne chiffrée ou, en cas d'échec, une chaîne de moins de 13 caractères garantie d'être différente du sel.
Version de PHP : 4+
Journal des modifications : Dans PHP 5.3.7, les modes Blowfish $2x$ et $2y$ ont été ajoutés pour gérer d'éventuelles attaques sur les bits de poids fort.

Dans PHP 5.3.2, les constantes SHA-256 et SHA-512 ont été ajoutées.

Depuis PHP 5.3.2, Blowfish retourne une chaîne « échec » (« *0 » ou « *1 ») en cas de tours invalides, plutôt que de revenir à DES.

À partir de PHP 5.3.0, PHP intègre sa propre implémentation de chiffrement MD5, son implémentation standard de DES, son implémentation étendue de DES et l'algorithme Blowfish. Si le système ne prend pas en charge les algorithmes ci-dessus, l'implémentation d'algorithme intégrée à PHP sera utilisée.


Exemples

Exemple 1

<?php $hashed_password = crypt('mypassword'); //Générer automatiquement le sel /*Vous devriez utiliser le résultat complet renvoyé par crypt() comme sel pour la vérification du mot de passe, afin d'éviter les problèmes causés par l'utilisation de différents algorithmes de hachage. (Comme mentionné ci-dessus, les hachages de mot de passe basés sur l'algorithme DES standard utilisent un sel de 2 caractères, tandis que les hachages basés sur l'algorithme MD5 utilisent un sel de 12 caractères.)*/ if (hash_equals($hashed_password, crypt($user_input, $hashed_password))) { echo "Mot de passe vérifié !"; } ?>

Exemple 2

Utilisation de htpasswd pour le chiffrement crypt() :

<?php //Définition d'un mot de passe $password = 'mypassword'; //Obtenir la valeur de hachage à l'aide d'un sel automatique $hash = crypt($password); ?>

Exemple 1

Dans cet exemple, nous utilisons différents types de hachage :

<?php if (CRYPT_STD_DES == 1) { echo 'DES standard : ' . crypt('rasmuslerdorf', 'rl') . "\n"; } if (CRYPT_EXT_DES == 1) { echo 'DES étendu: ' . crypt('rasmuslerdorf', '_J9..rasm') . "\n"; } if (CRYPT_MD5 == 1) { echo 'MD5: ' . crypt('rasmuslerdorf', '$1$rasmusle$') . "\n"; } if (CRYPT_BLOWFISH == 1) { echo 'Blowfish: ' . crypt('rasmuslerdorf', '$2a$07$usesomesillystringforsalt$') . "\n"; } if (CRYPT_SHA256 == 1) { echo 'SHA-256: ' . crypt('rasmuslerdorf', '$5$rounds=5000$usesomesillystringforsalt$') . "\n"; } if (CRYPT_SHA512 == 1) { echo 'SHA-512: ' . crypt('rasmuslerdorf', '$6$rounds=5000$usesomesillystringforsalt$') . "\n"; } ?>

Le code ci-dessus produit la sortie suivante (selon le système d'exploitation) :

Standard DES: rl.3StKT.4T8M
Extended DES: _J9..rasmBYk8r9AiWNc
MD5:          $1$rasmusle$rISCgZzpwk3UhDidwXvin0
Blowfish:     $2a$07$usesomesillystringfore2uDLvp1Ii2e./U9C8sBjqp8I90dH6hi
SHA-256:      $5$rounds=5000$usesomesillystri$KqJWpanXZHKq2BOB43TSaYhEWsQ1Lr5QNyPCDH/Tp.6
SHA-512:      $6$rounds=5000$usesomesillystri$D4IrlXatmP7rx3P3InaxBeoomnAihCKRVQP22JZ6EY47Wc6BkroIuUUBOov1i.S5KPgErtP/EN5mcO.ChWQW21



PHP String 参考手册Manuel de référence des chaînes PHP Autres extensions