Die Ausgabe der meisten Verschlüsselungs- (oder Hashing- usw.) Routinen sind willkürliche Binärdaten, die nicht sicher in eine URL eingefügt werden können, ohne sie zu codieren.
Als Eggyal Notes
, einfach mit urlencode()
auf den Daten sollte genug sein. Die standardmäßige URL-Codierung ist jedoch möglicherweise nicht die kompakteste Methode zum Codieren zufälliger Binärdaten. Base64
Encoding wäre effizienter, ist aber leider nicht vollständig URL-sicher durch die Verwendung von +
Zeichen.
Glücklicherweise gibt es eine standardisierte URL-sichere Variante der base64-Codierung, spezifiziert in RFC 4648 als "base64url". Hier ist ein Paar Funktionen zum Codieren und Decodieren von Daten mit dieser Codierung in PHP, basierend auf dieser Antwort von "gutzmer at usa dot net" :
function base64url_encode($data) {
return rtrim(strtr(base64_encode($data), '+/', '-_'), '=');
}
function base64url_decode($data) {
return base64_decode(strtr($data, '-_', '+/'));
}
(Ich habe die Dekodierungsfunktion etwas vereinfacht, da zumindest aktuelle PHP-Versionen anscheinend kein =
benötigen Füllzeichen in der Eingabe für base64_decode()
.)
PS. Um die zufälligen Token überhaupt sicher zu erzeugen, siehe z. diese Frage .