sql >> Base de Datos >  >> RDS >> Mysql

Hashing o cifrado de variables para enviar en una url

El resultado de la mayoría de las rutinas de cifrado (o hashing, etc.) son datos binarios arbitrarios, que no se pueden incluir de forma segura en una URL sin codificarlos.

Como notas eggyal , simplemente usando urlencode() en los datos debería ser suficiente. Sin embargo, la codificación de URL estándar puede no ser la forma más compacta de codificar datos binarios aleatorios. Base64 la codificación sería más eficiente, pero desafortunadamente no es completamente seguro para URL debido al uso de + personaje.

Afortunadamente, existe una variante segura de URL estandarizada de la codificación base64, especificada en RFC 4648 como "base64url". Aquí hay un par de funciones para codificar y decodificar datos usando esta codificación en PHP, basado en esta respuesta de "gutzmer at usa dot net" :

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

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

(He simplificado un poco la función de decodificación, ya que al menos las versiones actuales de PHP aparentemente no requieren = caracteres de relleno en la entrada a base64_decode() .)

PD. Para generar de forma segura los tokens aleatorios en primer lugar, consulte, p. esta pregunta .