A saída da maioria das rotinas de criptografia (ou hash, etc.) são dados binários arbitrários, que não podem ser incluídos com segurança em um URL sem codificá-lo.
Como notas eggyal , simplesmente usando
urlencode()
sobre os dados deve ser suficiente. No entanto, a codificação de URL padrão pode não ser a maneira mais compacta de codificar dados binários aleatórios. Base64
A codificação seria mais eficiente, mas infelizmente não é totalmente segura para URL devido ao uso do +
personagem. Felizmente, existe uma variante padronizada segura para URL da codificação base64, especificada em RFC 4648 como "base64url". Aqui está um par de funções para codificar e decodificar dados usando essa codificação em PHP, com base nesta resposta 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, '-_', '+/'));
}
(Simplifiquei um pouco a função de decodificação, já que pelo menos as versões atuais do PHP aparentemente não requerem
=
caracteres de preenchimento na entrada para base64_decode()
.) Ps. Para gerar com segurança os tokens aleatórios em primeiro lugar, consulte, por exemplo, esta pergunta .