Utdata från de flesta krypteringsrutiner (eller hashning, etc.) är godtyckliga binära data, som inte kan inkluderas säkert i en URL utan att koda den.
Som äggliga anteckningar
, helt enkelt med urlencode()
på uppgifterna borde räcka. Men standard URL-kodning kanske inte är det mest kompakta sättet att koda slumpmässig binär data. Base64
kodning skulle vara effektivare, men är tyvärr inte helt URL-säker på grund av dess användning av +
tecken.
Lyckligtvis finns det en standardiserad URL-säker variant av base64-kodningen, specificerad i RFC 4648 som "base64url". Här är ett par funktioner för att koda och avkoda data med denna kodning i PHP, baserat på detta svar av "gutzmer at usa dot net" :
function base64url_encode($data) {
return rtrim(strtr(base64_encode($data), '+/', '-_'), '=');
}
function base64url_decode($data) {
return base64_decode(strtr($data, '-_', '+/'));
}
(Jag har förenklat avkodningsfunktionen lite, eftersom åtminstone nuvarande versioner av PHP tydligen inte kräver =
utfyllnad av tecken i inmatningen till base64_decode()
.)
Ps. För säker generering av slumpmässiga tokens i första hand, se t.ex. denna fråga .