Maison  >  Article  >  développement back-end  >  Comment générer un jeton php ? Analyse de la génération de jetons en PHP

Comment générer un jeton php ? Analyse de la génération de jetons en PHP

不言
不言original
2018-07-23 10:22:496918parcourir

Le contenu partagé avec vous dans cet article concerne l'analyse de la génération de jetons en PHP. Il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer.

Comment générer un jeton php ? Analyse de la génération de jetons en PHP

Contexte

Souvent, nous devons utiliser des jetons comme identifiants, tels que : un identifiant d'authentification après la connexion d'un utilisateur.

Méthode de mise en œuvre

Méthode md5 :

$v = 1; // 自己定义的 需要hash 的value 值
$key = mt_rand(); // 这里用 随机串作为key
$hash = md5($key . $v . mt_rand() . time());
echo $hash;

Résultat de l'exécution : b63426a38f86b726ce0d327d48e47376 Cela n'a pas l'air très confortable, et en tant que trouble obsessionnel-compulsif, je ne le supporte pas.

Méthode md5 + Base64

$v = 1;
$key = mt_rand();
$hash = md5($key . $v . mt_rand() . time());
$token = base64_encode($hash);
echo $token;

Résultat de l'exécution : MWQyMjE2NmI3NDA1MmRjZTQwOTQzZDZjMWU1OTE5OGU= Cela a l'air un peu plus confortable, mais pas assez bon. Par contre, l'openid de WeChat n'a généralement pas ce qui suit. = sign

Optimisation

$v = 1;
$key = mt_rand();
$hash = md5($key . $v . mt_rand() . time());
$token = str_replace('=', '', base64_encode($hash));
echo $token;

Résultat de l'exécution : Yzg4MWU0OTQ0MTRiZTI0YWYwMDJjOTYyODBkNjFmMTM Il n'y a pas de signe = maintenant, ce qui est plus confortable, mais il est trop long. L'openid de WeChat n'est pas si long

Changez le hachage Essayez
méthode sha1 + base64

$v = 1;
$key = mt_rand();
$hash = hash_hmac("sha1", $v . mt_rand() . time(), $key, true);
$token = str_replace('=', '', base64_encode($hash));
echo $token;
Résultat de l'exécution :

est plus court, mais il contient un signe +/ Dans de nombreux cas, il sera urlcodé lorsqu'il sera passé par get , c'est ce qui se passe après l'urlcoding 7pn0pWzO+/TOoISNtDaewa4CyuXw, ce n'est évidemment pas ce que nous voulons 7pn0pWzO%2b%2fTOoISNtDaewa4CyuXw

Continuer à optimiser
$v = 1;
$key = mt_rand();
$hash = hash_hmac("sha1", $v . mt_rand() . time(), $key, true);
$token = str_replace('=', '', strtr(base64_encode($hash), '+/', '-_'));
echo $token;
Résultat de l'exécution :

Je ne peux pas coder l'url cette fois, c'est normal de le regarder. C'est plus confortable. C'est ce que j'utilise maintenant...JM9AkY7SAIROrJ7fhjIU2ApbMsI

Mais est-ce la meilleure solution ?

Je n'ai pas encore trouvé de meilleure solution, mais j'ai dit ce que je pense être une meilleure solution

Recommandations associées :

Traitement de la file d'attente php : principe d'implémentation de la file d'attente de messages PHP (images et texte)

Comment comprendre les classes abstraites et les méthodes abstraites en PHP ? (Avec code)

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn