Outputtet af de fleste krypterings- (eller hashing osv.) rutiner er vilkårlige binære data, som ikke sikkert kan inkluderes i en URL uden at kode den.
Som æggelige noter
, blot ved at bruge urlencode()
på dataene burde være nok. Men standard URL-kodning er muligvis ikke den mest kompakte måde at kode tilfældige binære data på. Base64
kodning ville være mere effektiv, men er desværre ikke fuldstændig URL-sikker på grund af dens brug af +
tegn.
Heldigvis findes der en standardiseret URL-sikker variant af base64-kodningen, specificeret i RFC 4648 som "base64url". Her er et par funktioner til kodning og afkodning af data ved hjælp af denne kodning i PHP, baseret på dette svar fra "gutzmer at usa dot net" :
function base64url_encode($data) {
return rtrim(strtr(base64_encode($data), '+/', '-_'), '=');
}
function base64url_decode($data) {
return base64_decode(strtr($data, '-_', '+/'));
}
(Jeg har forenklet afkodningsfunktionen en smule, da i det mindste nuværende versioner af PHP tilsyneladende ikke kræver =
udfyldning af tegn i input til base64_decode()
.)
Ps. For sikker generering af de tilfældige tokens i første omgang, se f.eks. dette spørgsmål .