La mayoría de estas respuestas están un poco equivocadas y demuestran una confusión entre sales y claves criptográficas. El propósito de incluir sales es modificar la función utilizada para codificar la contraseña de cada usuario de modo que cada hash de contraseña almacenado tenga que ser atacado individualmente. El único requisito de seguridad es que son únicos por usuario, no hay ningún beneficio en que sean impredecibles o difíciles de adivinar.
Las sales solo necesitan ser lo suficientemente largas para que la sal de cada usuario sea única. Es muy poco probable que las sales aleatorias de 64 bits se repitan incluso con mil millones de usuarios registrados, por lo que esto debería estar bien. Una sal repetida individualmente es una preocupación de seguridad relativamente menor, permite que un atacante busque dos cuentas a la vez, pero en conjunto no acelerará mucho la búsqueda en toda la base de datos. Incluso las sales de 32 bits son aceptables para la mayoría de los propósitos, en el peor de los casos acelerará la búsqueda de un atacante en aproximadamente un 58%. El costo de aumentar las sales más allá de 64 bits no es alto, pero no hay ninguna razón de seguridad para hacerlo.
También es beneficioso usar una sal de todo el sitio encima de la sal por usuario, esto evitará posibles colisiones con hashes de contraseñas almacenados en otros sitios y evitará el uso de tablas de arco iris de uso general, aunque incluso 32 bits de la sal es suficiente para hacer que las mesas arcoiris sean un ataque poco práctico
Incluso más simple, y los desarrolladores siempre pasan por alto esto: si tiene ID de usuario únicos o nombres de inicio de sesión, estos sirven perfectamente como una sal. Si hace esto, debe agregar una sal en todo el sitio para asegurarse de no superponerse con los usuarios de otro sistema que tenían la misma idea brillante.