La manière habituelle de stocker un mot de passe, est d'utiliser une fonction de hachage sur le mot de passe, mais à sel à l'avance. Il est important de "saler" le mot de passe, pour se défendre contre table arc-en-ciel attaques.
Votre tableau devrait donc ressembler à quelque chose comme ça
._______._________________.______________.
|user_id|hash |salt |
|-------|-----------------|--------------|
|12 |adsgasdg@g4wea...|13%!#tQ!#3t...|
| |... |... |
Pour vérifier si un mot de passe donné correspond à un utilisateur, vous devez concaténer le sel au mot de passe donné, et calculer la fonction de hachage de la chaîne résultante. Si la sortie de la fonction de hachage correspond au hash
il s'agit du bon mot de passe.
Il est important de comprendre cependant que l'idée du sel et du hachage a une raison spécifique : empêcher toute personne ayant accès à la base de données de connaître le mot de passe de quelqu'un (il est considéré comme un problème difficile d'inverser la sortie d'une fonction de hachage). Ainsi, par exemple, le DBA de la banque, ne serait pas en mesure de se connecter à votre compte bancaire, même s'il a accès à toutes les colonnes.
Vous devriez également envisager de l'utiliser si vous pensez que vos utilisateurs utiliseront un mot de passe sensible (par exemple le mot de passe de leur compte gmail) comme mot de passe pour votre site Web.
À mon avis, ce n'est pas toujours une fonction de sécurité qui est nécessaire. Vous devriez donc réfléchir si vous en avez besoin ou non.
Voir cet article pour un bon résumé de ce mécanisme.
Mise à jour : Il convient de mentionner que pour une sécurité supplémentaire contre les attaques ciblées visant à inverser le hachage d'un mot de passe individuel, vous devez utiliser bcrypt ce qui peut être arbitrairement difficile à calculer. (Mais à moins que vous n'ayez vraiment peur qu'un mystérieux homme en noir ne cible votre base de données spécifique, je pense que sha1 est suffisant. Je n'introduirais pas une autre dépendance pour mon projet pour cette sécurité supplémentaire. Cela dit, il n'y a aucune raison de ne pas utiliser sha1 100 fois, ce qui donnerait un effet similaire).