database - crypter - stocker mot de passe base de données




Meilleure façon de stocker le mot de passe dans la base de données (6)

Comme un hachage salé à la clé, en utilisant un algorithme sécurisé tel que sha-512.

Je travaille sur un projet qui doit avoir une authentification (nom d'utilisateur / passe)

Il se connecte également à une base de données, donc j'ai pensé que je stockerais le nom d'utilisateur et mot de passe, mais il semble que ce n'est pas une bonne idée d'avoir des mots de passe comme un champ de texte dans une table

J'utilise C # et me connecte à un serveur express 2008. Quelqu'un peut-il suggérer (avec autant d'exemples que possible) quel est le meilleur moyen de stocker ce type de données?

(Je suis ouvert à l'idée que cette information ne soit pas stockée dans la base de données si une bonne raison peut être fournie)



Je voudrais MD5 / SHA1 le mot de passe si vous n'avez pas besoin d'être en mesure d'inverser le hachage. Lorsque les utilisateurs se connectent, vous pouvez simplement chiffrer le mot de passe donné et le comparer au hash. Les collisions de hachage sont presque impossibles dans ce cas, sauf si quelqu'un accède à la base de données et voit un hash pour lequel il a déjà une collision.


La meilleure pratique de sécurité est de ne pas stocker le mot de passe (même pas crypté), mais de stocker le hachage salé (avec un sel unique par mot de passe) du mot de passe crypté.

De cette façon, il est (pratiquement) impossible de récupérer un mot de passe en clair.


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.

Hash It: Stocke les mots de passe utilisateur hashed (cryptage unidirectionnel) via une fonction de hachage forte. Une recherche sur "c # encrypt passwords" donne un tas 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).

Maintenant, un mot de passe haché signifie que vous (et les voleurs de base de données) ne devriez pas être en mesure d'inverser ce hachage dans le mot de passe d'origine.

Comment l'utiliser: Mais, dites-vous, comment puis-je utiliser ce mot de passe écrasé stocké dans la base de données?

Lorsque l'utilisateur se connecte, il vous remettra le nom d'utilisateur et le mot de passe (dans son texte d'origine). Vous utilisez simplement le même code de hachage pour hacher ce mot de passe pour saisir la version stockée.

Comparez donc les deux mots de passe hachés (hash de la base de données pour le nom d'utilisateur et le mot de passe saisi et hashé). Vous pouvez dire si "ce qu'ils ont tapé" correspond à "ce que l'utilisateur d'origine a saisi pour son mot de passe" en comparant leurs hachages.

Crédit supplémentaire:

Question: Si j'avais votre base de données, alors ne pourrais-je pas prendre un cracker comme John the Ripper et commencer à faire des hashes jusqu'à ce que je trouve des correspondances avec vos mots de passe stockés et hachés? (puisque les utilisateurs choisissent court, les mots du dictionnaire de toute façon ... cela devrait être facile)

Réponse: Oui ... oui ils peuvent.

Donc, vous devriez «sel» vos mots de passe. Voir salt

Voir "Comment hacher les données avec du sel" Exemple C #


Dans votre scénario, vous pouvez jeter un oeil à l'adhésion à asp.net, il est recommandé de stocker le mot de passe de l'utilisateur sous forme de chaîne hachée dans la base de données. vous pouvez authentifier l'utilisateur en comparant le mot de passe entrant haché avec celui stocké dans la base de données.

Tout a été construit à cette fin, consultez l' abonnement asp.net





passwords