Pour un sel, l'unicité est plus importante que la longueur et la prévisibilité. Vous supposez que l'attaquant a le sel.
Un identifiant universel unique (UUID) serait le mieux, et il existe des exemples qui génèrent des identifiants universellement uniques sur la page doc pour le php uniqueid() fonction. Un UUID a l'avantage sur une chaîne aléatoire en ce qu'il est lisible par l'homme et de longueur fixe, vous pouvez donc le stocker dans un champ varchar et utiliser un index unique pour vous assurer qu'il n'y a jamais de doublons.
Le hachage de l'heure avec MD5 est une méthode courante pour générer des valeurs uniques car il a une longueur fixe et est lisible par l'homme. Cependant, il est plus logique de générer une chaîne aléatoire de longueur fixe et de l'encoder vous-même en hexadécimal. Les hachages ne sont pas conçus pour être uniques, mais ils sont conçus pour ne pas être réversibles. L'utilisation d'une fonction de hachage garantit les collisions, bien qu'il y ait moins de collisions avec SHA1 qu'avec MD5.
La longueur du sel n'est vraiment qu'un facteur, car plus le sel est long, plus il est susceptible d'être universellement unique.