5 votes

Quelle est la meilleure façon de crypter un mot de passe?

Je suis sur le point de créer une page 'Connexion' pour mon application et je me demandais quelle est la meilleure façon de chiffrer un mot de passe pour mon utilisateur que je vais entrer dans ma base de données ? J'ai trouvé plusieurs méthodes sur Google mais je ne sais pas laquelle est la meilleure.

0 votes

Avez-vous besoin de mots de passe "chiffrés" ou "hachés"? Ce n'est pas la même chose. Le hachage est plus sécurisé, mais si vous avez besoin de pouvoir les lire un jour, le chiffrement est la meilleure option. La plupart des réponses ci-dessous supposent que vous voulez des hachages. Pouvez-vous préciser :) ?

0 votes

Je veux des hachages. Plus sécurisé :)

8voto

Chris Taylor Points 25865

Je choisirais un hash salé unidirectionnel.

En utilisant par exemple un hash SHA1, vous auriez un moyen de stocker le mot de passe sous forme de hash qui ne peut pas être inversé pour retrouver le mot de passe original. Ensuite, lorsque l'utilisateur entre son mot de passe, vous effectuez le même hash SHA1 sur le mot de passe et comparez ce hash avec ce que vous avez stocké dans la base de données, s'ils correspondent alors le mot de passe est correct.

Pour renforcer davantage le hachage, vous pouvez ajouter un sel, il s'agit essentiellement d'une valeur générée aléatoirement que vous générez pour chaque utilisateur lorsque vous créez le compte, et stockez la valeur du sel dans l'enregistrement de l'utilisateur. Lorsque vous créez le hash du mot de passe, vous combinez d'abord le mot de passe avec le sel et hachez cette valeur combinée. Pour authentifier l'utilisateur, vous combinez le mot de passe saisi avec le sel stocké pour l'utilisateur, effectuez le hachage sur la valeur combinée et comparez.

En ajoutant le sel au mélange, vous vous assurez que le hachage pour les mots de passe qui se trouvent être les mêmes ont un hachage différent car la portion salée diffère. Ainsi, si deux utilisateurs ont le même mot de passe "MotDePasse1234", le hachage stocké des deux ne sera pas le même, il ne sera donc pas possible de déterminer que deux utilisateurs ont le même mot de passe.

0 votes

+1, mais je ne recommanderais pas d'utiliser SHA1. Je recommanderais plutôt blowfish/twofish ou SHA-2. Voir: stackoverflow.com/questions/1561174/…

0 votes

Le hachage SHA1/SHA2 n'est pas optimal car il est rapide et donc plus susceptible d'être piraté par force brute. Utiliser un bon KDF est donc préférable.

1 votes

C'est un excellent endroit pour commencer sur ce obviex.com/samples/EncryptionWithSalt.aspx

3voto

CodesInChaos Points 60274

Je recommande d'utiliser Rfc2898DeriveBytes

Il utilise une bonne fonction de dérivation de clé standardisée et des hashs modernes. Vous devez passer un sel en plus du mot de passe pour prévenir les attaques par tables arc-en-ciel. 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 votes

RFC2898 est également connu sous le nom de PBKDF2.

1voto

snemarch Points 3328

Utilisez bcrypt. Non, vraiment, abandonnez toutes les idées que vous avez de construire votre propre méthode, et utilisez bcrypt. Le monde a déjà assez de schémas de hachage de mots de passe maison non sécurisés.

Stocker des hachages de mots de passe salés, avec des sels par utilisateur bien sûr, c'est bien. Mais le salage ne prévient que les attaques par table arc-en-ciel, il ne prévient pas le bruteforcing. 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 votes

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

0voto

m.qayyum Points 328

Vous pouvez utiliser l'algorithme RSA : http://www.codeproject.com/KB/security/RSACryptoPad.aspx

-1voto

Saurabh Points 11097

Utilisez l'algorithme de cryptographie fourni par le framework .net

Normalement, de nombreuses applications utilisent l'algorithme MD5

Voir ici

3 votes

Sauf si vous avez vraiment besoin de la petite taille de clé ou de la vitesse, il n'y a vraiment aucune raison d'utiliser MD5 dans de nouvelles applications.

0 votes

Il n'y a aucune raison d'utiliser MD5 sauf pour la compatibilité ascendante. Pour le nouveau code, je préférerais SHA-1 ou SHA-2

0 votes

Certainement SHA-2. Le framework .NET fournit SHA256 et SHA512 en tant que fonctions intégrées dans l'System.Security.Cryptography espace de noms.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X