Esta pergunta tem sido muito feita, com escolha de palavras diferente (o que torna difícil dizer:"Basta procurar!"). Esse fato gerou uma postagem no blog intitulada The Guia abrangente para criptografia de parâmetros de URL em PHP .
O que as pessoas querem fazer aqui
O que as pessoas deveriam fazer em vez disso
Explicação
Normalmente, as pessoas querem curtas URLs de aparência aleatória. Isso não permite muito espaço para criptografar e autenticar o ID do registro do banco de dados que você deseja ofuscar. Isso exigiria um comprimento mínimo de URL de 32 bytes (para HMAC-SHA256), que é de 44 caracteres quando codificado em base64.
Uma estratégia mais simples é gerar uma string aleatória (veja random_compat para uma implementação PHP5 de
random_bytes()
e random_int()
para gerar essas strings) e faça referência a essa coluna. Além disso, hashids estão quebrados por criptoanálise simples. Sua conclusão afirma:
O ataque que descrevi é significativamente melhor do que um ataque de força bruta, então, do ponto de vista criptográfico, o algoritmo é considerado quebrado, é muito fácil recuperar o sal; tornando possível que um invasor execute a codificação em qualquer direção e invalida a propriedade 2 para uma função de hash ideal.
Não confie nisso.