Dans PHP, la fonction crypte () est une fonction pour le hachage des mots de passe et génère des chaînes cryptées basées sur différents algorithmes de chiffrement. De nombreux développeurs peuvent considérer directement l'utilisation de la valeur de hachage générée par la fonction crypt () comme un jeton lors de la mise en œuvre d'authentification ou de mécanismes de jeton. Ainsi, la valeur de hachage générée par crypte () peut-elle être utilisée en toute sécurité comme jeton? Cet article analysera cela.
L'utilisation de base de la fonction crypte () est la suivante:
$hash = crypt($password, $salt);
$ mot de passe est une chaîne (généralement un mot de passe) qui doit être cryptée.
$ Le sel est le "sel" requis pour le cryptage pour augmenter le caractère unique et la sécurité du hachage.
Selon les paramètres de sel passé, Crypt () sélectionnera différents algorithmes de chiffrement, tels que DES, MD5, Blowfish (en commençant par 2A $ ), etc.
Un jeton sûr doit répondre aux conditions suivantes:
Unicité : les jetons générés par différentes demandes doivent être différents pour empêcher les attaques de relecture.
Imprévisibilité : les attaquants ne peuvent pas déduire d'autres jetons à travers des jetons connus.
Suffisamment de longueur et de complexité : garantit qu'il est difficile de se fissurer par force brute.
Empêcher la contrefaçon : il ne peut pas être facilement forgé ou falsifié.
L'objectif principal de Crypt () est d'avoir un hachage à sens unique du mot de passe. Bien que le résultat de hachage enregistre en toute sécurité le digest de mot de passe, il ne convient pas à la génération de jetons, pour des raisons, notamment:
Crypt () utilise la même entrée et le même sel et génère la même valeur de hachage. Si vous utilisez le mot de passe comme entrée directement et que le sel reste inchangé, le jeton sera corrigé, ce qui n'est pas propice à la génération d'un jeton unique et changeant.
Si le sel n'est pas bien conçu, il peut conduire à la prévisible du jeton, puis deviné ou réutilisé par l'attaquant.
Cela fait réutiliser le jeton en différentes sessions ou demandes, perdant la rapidité.
Pour assurer la sécurité du jeton, les méthodes suivantes sont recommandées:
PHP peut utiliser random_bytes () ou bin2hex (random_bytes ($ longueur)) pour générer des chaînes aléatoires de haute intensité:
$token = bin2hex(random_bytes(32)); // 64Chaîne aléatoire de la longueur du bit
Utilisez hash_hmac () pour crypter des chaînes aléatoires pour assurer l'intégrité et la non-faveur des jetons:
$secret_key = 'your_secret_key';
$random_string = bin2hex(random_bytes(16));
$token = hash_hmac('sha256', $random_string . time(), $secret_key);
Les bibliothèques standard telles que JSON Web Token (JWT) peuvent générer des jetons sécurisés, y compris les informations utilisateur et les dates d'expiration, et peuvent vérifier les signatures.
La valeur de hachage générée par la fonction crypt () convient principalement au stockage de mot de passe et ne convient pas directement à une utilisation en tant que jeton:
Sa sortie manque de caractère aléatoire et de rythme.
Il est facile de provoquer des jetons à fixer et prévisibles.
La gestion des valeurs de sel est complexe et gênante pour la génération de jetons dynamiques.
Par conséquent, il est recommandé d'utiliser des fonctions de nombre aléatoire spéciales et des algorithmes de signature pour générer des jetons sûrs et uniques.