La manière habituelle de stocker le mot de passe est d'utiliser une fonction de hachage sur le mot de passe, mais de salt cela au préalable. Il est important de "saler" le mot de passe, pour se défendre contre table arc-en-ciel attaques.
Donc, votre table devrait ressembler à ça
._______._________________.______________.
|user_id|hash |salt |
|-------|-----------------|--------------|
|12 |[email protected]|13%!#tQ!#3t...|
| |... |... |
Lorsque vous vérifiez 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 de résultat. Si la sortie de la fonction de hachage correspond au hash
colonne - c'est le bon mot de passe.
Il est important de comprendre cependant que l'idée de hachage salé 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 quiconque (il est considéré comme un problème difficile d'inverser une sortie de fonction de hachage). Ainsi, par exemple, le DBA de la banque ne pourra pas 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, leur mot de passe pour leur compte gmail) comme mot de passe pour votre site Web.
À mon humble avis, ce n'est pas toujours une fonction de sécurité qui est nécessaire. Vous devriez donc vous demander si vous le voulez ou non.
Voir cet article pour un bon résumé de ce mécanisme.
Mise à jour : Il convient de mentionner que, pour plus de sécurité contre les attaques ciblées visant à inverser le hachage d'un mot de passe individuel, vous devez utiliser bcrypt , qui peut être arbitrairement difficile à calculer. (Mais à moins que vous n'ayez vraiment peur de l'homme mystérieux en noir ciblant votre base de données spécifique, je pense que sha1 est assez bon. 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).