Heim  >  Artikel  >  Backend-Entwicklung  >  Wie erstelle ich ein PHP-Token? Analyse der Token-Generierung in PHP

Wie erstelle ich ein PHP-Token? Analyse der Token-Generierung in PHP

不言
不言Original
2018-07-23 10:22:497038Durchsuche

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.

Wie erstelle ich ein PHP-Token? Analyse der Token-Generierung in PHP

Hintergrund

Oft müssen wir Token als Identifikatoren verwenden, z. B. als Authentifizierungsidentifikator, nachdem sich ein Benutzer angemeldet hat.

Implementierungsmethode

md5-Methode:

$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.

md5 + base64-Methode

$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: Yzg4MWU0OTQ0MTRiZTI0YWYwMDJjOTYyODBkNjFmMTMEs gibt jetzt kein =-Zeichen, was bequemer ist, aber die OpenID von WeChat ist nicht so lang

Versuchen Sie es ein anderer Hash

sha1 + base64-Methode

$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 ...

Aber ist das die beste Lösung?

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn