Mysql
 sql >> Database >  >> RDS >> Mysql

Hashing o crittografia delle variabili da inviare in un URL

L'output della maggior parte delle routine di crittografia (o hashing, ecc.) sono dati binari arbitrari, che non possono essere inclusi in modo sicuro in un URL senza codificarlo.

Come note eggyal , semplicemente usando urlencode() sui dati dovrebbe essere sufficiente. Tuttavia, la codifica URL standard potrebbe non essere il modo più compatto per codificare dati binari casuali. Base64 la codifica sarebbe più efficiente, ma sfortunatamente non è completamente sicura per gli URL a causa dell'uso del + carattere.

Fortunatamente, esiste una variante standardizzata sicura per gli URL della codifica base64, specificata in RFC 4648 come "base64url". Ecco un paio di funzioni per codificare e decodificare i dati utilizzando questa codifica in PHP, basato su questa risposta di "gutzmer at usa dot net" :

function base64url_encode($data) {
    return rtrim(strtr(base64_encode($data), '+/', '-_'), '=');
}

function base64url_decode($data) {
    return base64_decode(strtr($data, '-_', '+/'));
}

(Ho semplificato un po' la funzione di decodifica, dal momento che almeno le versioni correnti di PHP apparentemente non richiedono = caratteri di riempimento nell'input di base64_decode() .)

Sal. Per generare in modo sicuro i token casuali, in primo luogo, vedere ad es. questa domanda .