Contexte Vous n'avez jamais ... vraiment ... besoin de connaître le mot de passe de l'utilisateur. Vous voulez juste vérifier qu'un utilisateur entrant connaît le mot de passe d'un compte.
Hachez-le : Stockez les mots de passe des utilisateurs en les hachant (cryptage à sens unique) via une fonction de hachage forte. Une recherche sur "c# encrypt passwords" donne une foule d'exemples.
Voir le créateur de hachage SHA1 en ligne pour avoir une idée de ce que produit une fonction de hachage (mais n'utilisez pas SHA1 comme fonction de hachage, utilisez quelque chose de plus fort comme SHA256).
Or, un mot de passe haché signifie que vous (et les voleurs de bases de données) ne devriez pas être en mesure d'inverser ce hachage pour retrouver le mot de passe original.
Comment l'utiliser : Mais, dites-vous, comment puis-je utiliser ce mot de passe mélangé stocké dans la base de données ?
Lorsque l'utilisateur se connecte, il vous remet son nom d'utilisateur et son mot de passe (dans son texte original). Il suffit d'utiliser le même code de hachage pour hacher le mot de passe saisi et obtenir la version stockée.
Comparez donc les deux mots de passe hachés (le hachage de la base de données pour le nom d'utilisateur et le mot de passe saisi et haché). Vous pouvez dire si "ce qu'ils ont tapé" correspond à "ce que l'utilisateur original a entré pour son mot de passe" en comparant leurs hachages.
Un crédit supplémentaire :
Question : Si j'avais votre base de données, ne pourrais-je pas simplement prendre un craqueur comme John l'Éventreur et commencer à faire des hachages jusqu'à ce que je trouve des correspondances avec vos mots de passe stockés et hachés ? (puisque les utilisateurs choisissent de toute façon des mots courts du dictionnaire... cela devrait être facile).
Réponse : Oui ... oui ils peuvent.
Vous devez donc "saler" vos mots de passe. Voir le Article de Wikipédia sur le sel
Voir Exemple C# : "Comment hacher des données avec un sel". (archivé)
1 votes
Quoi qu'il en soit, si vous optez pour le cryptage, ne stockez pas la clé dans le code, comme l'a mentionné un poster précédent. C'est une mauvaise pratique.
2 votes
Il est préférable de s'en tenir aux normes - voir fr.wikipedia.org/wiki/PBKDF2 Il vous suffit de trouver une implémentation dans votre langue.
7 votes
Cette question a reçu une réponse détaillée dans le forum sur la sécurité : security.stackexchange.com/questions/211/