2010-12-04 32 views
4

Je suis sur le point de me connecter à mon application et je me demandais quel est le meilleur moyen de crypter un mot de passe pour mon utilisateur que je vais entrer dans ma base de données? J'ai trouvé beaucoup de chemin sur Google, mais je ne sais pas quel est le meilleur ..cryptage du mot de passe

+0

Avez-vous besoin des mots de passe "Encrypted" ou des mots de passe "Hashed"? Ce n'est pas la même chose. Hashed est plus sûr, mais si vous avez besoin d'être capable de les lire un jour, alors Crypté est le chemin à parcourir. La plupart des réponses ci-dessous supposent que vous voulez des hachages. Pouvez-vous clarifier :) ? –

+0

je veux des hachages. Plus sécurisé :) – Alex

Répondre

8

Je voudrais aller avec un sens salted hash. En utilisant un hachage SHA1 par exemple, vous auriez un moyen de stocker le mot de passe comme un hachage qui ne peut pas être retourné au mot de passe d'origine. Ensuite, lorsque l'utilisateur entre son mot de passe, vous exécutez le même hachage SHA1 sur le mot de passe et comparez ce haché avec ce que vous avez stocké dans la base de données, s'ils correspondent, le mot de passe est correct. Pour sécuriser davantage le hachage, vous pouvez ajouter un salt, il s'agit essentiellement d'une valeur générée aléatoirement que vous générez pour chaque utilisateur, puis vous créez le compte et stockez la valeur salt dans l'enregistrement utilisateur. Lorsque vous créez le hachage du mot de passe, vous combinez d'abord le mot de passe avec le salt et hachez cette valeur combinée. Pour authentifier l'utilisateur, vous combinez le mot de passe entré avec le sel stocké pour l'utilisateur, exécutez le hachage sur la valeur combinée et comparez. En ajoutant du sel au mélange, vous vous assurez que le hachage pour les mots de passe qui se ressemblent ont un hash différent parce que la partie salée diffère. Donc, si deux utilisateurs ont le même mot de passe "Password1234", le hachage stocké pour les deux ne sera pas le même, donc il ne peut pas être déterminé que deux utilisateurs ont le même mot de passe.

+0

+1, mais je ne recommanderais pas d'utiliser SHA1. Je recommanderais blowfish/twofish ou SHA-2. Voir: http://stackoverflow.com/questions/1561174/sha512-vs-blowfish-and-bcrypt – Falcon

+0

La bourse SHA1/SHA2 n'est pas optimale car elle est rapide et donc plus sensible à la force brute. Donc, en utilisant un bon KDF est mieux. – CodesInChaos

+1

Ceci est un excellent endroit pour commencer sur ce http://www.obviex.com/samples/EncryptionWithSalt.aspx – Tom

-1

Utiliser algorithme Cryptographie fourni par NET Framework

normalement, de nombreuses applications utilise MD5 algorithem

See here

+2

À moins que vous n'ayez absolument besoin de la plus petite taille de clé ou de la vitesse, il n'y a vraiment aucune raison d'utiliser MD5 dans de nouvelles applications. –

+0

Il n'y a aucune raison d'utiliser MD5 à l'exception de la rétrocompatibilité. Pour le nouveau code je préférerais SHA-1 ou SHA-2 – CodesInChaos

+0

Certainement SHA-2. Le .NET Framework fournit SHA256 et SHA512 en tant que fonctions intégrées dans l'espace de noms ['System.Security.Cryptography'] (http://msdn.microsoft.com/en-us/library/system.security.cryptography.aspx) . –

3

Je recommande d'utiliser Rfc2898DeriveBytes

Il utilise un bon normalisé Dérivation-Key Fonction et des hachages modernes. Vous devez passer dans un sel en plus du mot de passe pour éviter les arc-en-tables. Et il mélange le sel et le mot de passe pour vous, donc vous n'avez pas besoin de comprendre comment le faire vous-même.

+1

RFC2898 est également connu comme PBKDF2. – caf

1

Utilisez bcrypt. Non, vraiment, laisser tomber toutes les idées que vous avez de construire votre propre méthode, et use bcrypt. Le monde a déjà assez de plans de hachage de mots de passe non sécurisés pour les homebrews.

Le stockage des hachages de mots de passe salés, avec des sels par utilisateur bien sûr, est très bien. Mais le salage n'empêche que les attaques de la table arc-en-ciel, cela n'empêche pas la brutalité. Donc, paradoxalement, vous ne voulez pas utiliser une méthode rapide pour générer ou vérifier les hachages de mots de passe. MD5, SHA, peu importe - ils sont tous rapides. Répétez après moi: utilisez bcrypt.

+0

Bcrypt et PBKDF2 (alias RFC2898) sont tous deux de bons KDF. Mais * utilisez * un vrai KDF! – caf