Pourquoi PHP crypt() ajouter le sel à la table de hachage?

Je suis à la recherche dans la construction d'un système de connexion et après avoir lu le manuel php lorsque vous passez à 2 chiffres de sel à la crypt() la fonction retourne une chaîne de hash, et les 2 premiers chiffres de la chaîne sont le sel que vous avez utilisé.

exemple:

$salt = "kr";
echo crypt("mysecret",$salt); //returns "kreOI.F7eOQMY"

Ma première pensée a été, ne serait-ce pas aider quelqu'un qui est en train d'essayer d'inverser votre hash?

J'ai regardé sel sur wikipédia qui dit:

Pour une sécurité optimale, le sel de la valeur est gardée secrète.

Donc je ne comprends pas pourquoi la fonction crypt (), le retour de tous les hachages de préfixer avec le sel de la valeur utilisée?

Est-il une raison pour cela? Cela devrait-il être un problème de sécurité?

C'est pourquoi je vous recommande deux sel de la partie. L'un dans un fichier de config qui est secret, mais la même pour tous les utilisateurs, et une partie enregistrée ensemble avec le mot de passe qui est différent pour chaque utilisateur/généré de façon aléatoire.
en fait, je suis en train de mettre à niveau un que j'ai hérité.
Wikipédia ne doit pas être pris comme parole d'évangile. Les sels ne sont pas secrètes.

OriginalL'auteur JD Isaacks | 2011-01-26