Der Inhalt, der in diesem Artikel mit Ihnen geteilt wird, befasst sich mit der Analyse der Token-Generierung in PHP. Freunde in Not können sich darauf beziehen.
Oft müssen wir Token als Identifikatoren verwenden, z. B. als Authentifizierungsidentifikator, nachdem sich ein Benutzer angemeldet hat.
$v = 1; // 自己定义的 需要hash 的value 值 $key = mt_rand(); // 这里用 随机串作为key $hash = md5($key . $v . mt_rand() . time()); echo $hash;
Ausführungsergebnis: b63426a38f86b726ce0d327d48e47376
Es sieht nicht sehr angenehm aus und als Zwangsstörung kann ich es nicht ertragen.
$v = 1; $key = mt_rand(); $hash = md5($key . $v . mt_rand() . time()); $token = base64_encode($hash); echo $token;
Ausführungsergebnis: MWQyMjE2NmI3NDA1MmRjZTQwOTQzZDZjMWU1OTE5OGU=
Es sieht etwas komfortabler aus, ist aber nicht gut genug. Andererseits hat die OpenID von WeChat im Allgemeinen kein =-Zeichen dahinter
Optimierung
$v = 1; $key = mt_rand(); $hash = md5($key . $v . mt_rand() . time()); $token = str_replace('=', '', base64_encode($hash)); echo $token;
Ausführungsergebnis: Yzg4MWU0OTQ0MTRiZTI0YWYwMDJjOTYyODBkNjFmMTM
Es gibt jetzt kein =-Zeichen, was bequemer ist, aber die OpenID von WeChat ist nicht so lang
Versuchen Sie es ein anderer Hash
$v = 1; $key = mt_rand(); $hash = hash_hmac("sha1", $v . mt_rand() . time(), $key, true); $token = str_replace('=', '', base64_encode($hash)); echo $token;
Ausführungsergebnis: 7pn0pWzO+/TOoISNtDaewa4CyuXw
ist kürzer, aber es enthält ein +/-Zeichen. In vielen Fällen wird es urlcodiert, wenn es von get übergeben wird , und nach dem URL-Code wird es so aussehen7pn0pWzO%2b%2fTOoISNtDaewa4CyuXw
, Das ist offensichtlich nicht das, was wir wollen
Weiter optimieren
$v = 1; $key = mt_rand(); $hash = hash_hmac("sha1", $v . mt_rand() . time(), $key, true); $token = str_replace('=', '', strtr(base64_encode($hash), '+/', '-_')); echo $token;
Ausführungsergebnisse: JM9AkY7SAIROrJ7fhjIU2ApbMsI
Ich kann jetzt keinen URL-Code erstellen, und es sieht bequemer aus. So verwende ich es derzeit ...
Ich habe keine bessere Lösung gefunden Bisher habe ich nur angegeben, was meiner Meinung nach eine bessere Lösung ist:
PHP-Warteschlangenverarbeitung: Prinzip der PHP-Nachrichtenwarteschlangenimplementierung (Bild und Text) Wie versteht man abstrakte PHP-Klassen und abstrakte Methoden? (Mit Code)Das obige ist der detaillierte Inhalt vonWie erstelle ich ein PHP-Token? Analyse der Token-Generierung in PHP. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!