Ma prochaine tâche sera de crypter les mots de passe. Je travaille à la couche d'accès à la base de données et mon collègue a fait cette demande: implémenter un hachage SHA-512 sur une méthode vide. Comment puis-je faire ceci?Comment faire pour hacher un mot de passe?
Répondre
un processus assez simple, vraiment:
byte[] data = Encoding.UTF8.GetBytes(stringPasswordForExample);
using(SHA512 sha512 = new SHA512Managed())
{
byte[] hash = sha512.ComputeHash(data); // Add Per User Salt as per the Below
}
hash
contient maintenant un hachage non-reversible des données initiales que vous avez voulu HASHED. En outre, consultez MSDN. Quelques notes: (. Plus le mieux, et unique par utilisateur - Merci Paul, bon point)
Un mot sur le downvote? Merci. –
+1 de moi, bien qu'il serait utile de mentionner le sel devrait être unique par mot de passe. Et peut-être changer votre exemple pour inclure le sel – PaulG
@Paul - Bon point, ajouté dans –
C# exemple de cette page:
byte[] data = new byte[DATA_SIZE];
byte[] result;
SHA512 shaM = new SHA512Managed();
result = shaM.ComputeHash(data);
-1 pour utiliser le SHA-512 ordinaire, ce qui est rapide. Utilisez une fonction de dérivation de clé lente, telle que PBKDF2, bcrypt ou scrypt. – CodesInChaos
Vous devez utiliser bcrypt, qui est plus sûr pour les mots de passe que SHA512.
Si vous avez vraiment besoin d'utiliser SHA512, vous devez utiliser le SHA512Managed
class, comme d'autres réponses l'ont mentionné.
Assurez-vous de saler votre hachage.
Comment faire pour hacher un mot de passe?
Avec un sel. Vraiment.
Jamais, jamais faire ceci:
byte[] data = Encoding.UTF8.GetBytes(stringPasswordForExample);
Mais ceci:
byte[] data = Encoding.UTF8.GetBytes(stringPasswordForExample + salt);
C'est l'un des plus mal compris "truc du métier". La plupart des gens ne savent pas ce qu'est un "sel" et quand vous leur expliquez, ils pensent que c'est inutile.
La vérité est: SHA-512 ou MD5 ou un hachage très faible, une fois que les tables arc-en-ciel sont précalculées, cela ne fait aucune différence. SHA-65536, devrait-il exister (je suis facétieux ici), ne serait pas meilleur que n'importe quel autre algorithme de hachage une fois que les tables arc-en-ciel sont précalculées.
Un assez grand « sel » fait des tables arc-en-impossible:
http://en.wikipedia.org/wiki/Rainbow_table
Notez que même si vous comprenez comment hashes, tables de sel et arc-en-relation (et donc comprendre pourquoi les états de l'article de Wikipédia: "Un sel est souvent utilisé avec des mots de passe hachés pour rendre cette attaque plus difficile, souvent infaisable.") il y a une très forte probabilité que vos collègues ne le fassent pas. Tout comme il est très probable que la plupart des gens de haut en bas dans ce fil ne comprennent pas ce sujet.
J'ai vu des réponses ici sur SO avec 30 upvotes où quelqu'un qui ne pouvait pas comprendre ce que le sel a été maintenu à venir avec techno-buzzwords pour défendre sa position ... Et pourtant il avait toutes ces upvotes (trop paresseux pour trouver la question mais c'était épique).
Et vous devez utiliser 'RNGCryptoServiceProvider' pour créer votre sel pour chaque nouveau hachage, et stocker à la fois le hachage et le sel. – Will
Un sel seul ne suffit pas. La fonction de hachage devrait également être lente. Utilisez PBKDF2, bcrypt ou scrypt. – CodesInChaos
- 1. Kohana Auth Module ne pas hacher le mot de passe
- 2. Faire un verrouillage de mot de passe pour une application?
- 3. Comment puis-je hacher un mot de passe et le stocker pour une vérification ultérieure avec un autre résumé?
- 4. Comment salt et hacher une valeur de mot de passe en utilisant C#?
- 5. HTML/CSS: Comment faire "mot de passe" entrée afficher le mot de passe?
- 6. Comment fonctionne le mot de passe wordpress?
- 7. Faire un login programmatique sans nom d'utilisateur/mot de passe?
- 8. Comment faire pour comparer le mot de passe Microsoft Access avec le mot de passe fourni par l'utilisateur?
- 9. Mot de passe et confirmer le mot de passe
- 10. Fonction de hachage par mot de passe pour Excel VBA
- 11. Comment générer un mot de passe aléatoire, ou une URL temporaire, pour réinitialiser un mot de passe dans Zend Framework?
- 12. Comment faire pour spider un site protégé par mot de passe en python?
- 13. Comment faire pour que svnant/svnkit demande un nom d'utilisateur/mot de passe
- 14. Comment faire pour que ActiveDirectoryMembershipProvider accepte un mot de passe vide?
- 15. Comment faire pour hacher un GUID et un horodatage 64 bits dans un autre GUID
- 16. Comment ajouter un mot de passe à une clé privée OpenSSH générée sans mot de passe?
- 17. Utiliser un sous-processus pour envoyer un mot de passe
- 18. Tuyauterie mot de passe pour smbpasswd
- 19. récupération de mot de passe pour drupal
- 20. Comment faire pour faire tourner les bits dans un mot
- 21. Demander un mot de passe pour désinstaller/supprimer l'application
- 22. Comment obtenir un mot de passe avec un programme CLI?
- 23. Mot de passe char pour RichTextBox
- 24. C# Asp.Net 2.0 - Comment vérifier un mot de passe par rapport à un mot de passe d'annuaire actif?
- 25. Mot de passe Protéger pour le plaisir
- 26. expression régulière pour mot de passe
- 27. Comment réinitialiser le mot de passe SA?
- 28. JavaScript pour valider le mot de passe
- 29. Cryptage de mot de passe
- 30. Mise en œuvre de hachage de mot de passe
Ne le faites pas. Laissez le cryptage du mot de passe aux experts en sécurité. Vous vous tromperez, et vous mettrez votre organisation en péril. Embaucher un expert c'est beaucoup moins cher que le coût de nettoyer le désordre après une attaque réussie contre les faiblesses que vous ne saviez pas que vous étiez en train d'ajouter à votre système de sécurité. –
L'embauche d'un expert dépend de votre niveau de risque. Si vous stockez des informations privées pour les masses et que ce mot de passe est tout ce qui se trouve sur le chemin, oui cherchez un expert. La plupart des exemples ci-dessous suffiront pour votre projet d'information non confidentiel moyen. –
@Eric - Je suppose que vous voulez dire par là "utiliser l'implémentation de SHA512 dans .NET au lieu de créer le vôtre", pas "utiliser les fournisseurs d'appartenances implémentés dans .NET pour votre sécurité." Je peux voir une certaine validité à la fois, mais alors que je suis d'accord à 100% avec le premier, je peux voir des situations où ce dernier n'est pas vraiment possible. En fait, il ne m'est jamais venu à l'esprit que quelqu'un envisagerait de mettre en place sa propre version de SHA-512. Votre commentaire m'a donc laissé perplexe pour savoir si je devais sous-traiter la sécurité de mes applications à quelqu'un de plus qualifié. :-) – tvanfosson