Changer passwordFormat Cryptée à partir de Haché
Je suis la recherche étonnamment peu d'informations sur la conversion d'une base de données existante à partir des mots de passe Cryptés des mots de passe Hachés. (J'ai été capable de trouver un peu plus d'informations sur la conversion dans l'autre sens, mais il n'était pas d'une grande aide.)
Comme la plupart des gens savent, la modification de la passwordFormat
paramètre dans le web.config n'affecte que les nouveaux utilisateurs. J'ai une base de données avec un couple de centaines d'utilisateurs et je voudrais les convertir à utiliser des mots de passe hachés sans changer les mots de passe existants.
Est ce que quelqu'un d'autre familier avec la façon dont on pourrait aborder cette? Merci pour les conseils.
OriginalL'auteur Jonathan Wood | 2011-02-09
Vous devez vous connecter pour publier un commentaire.
C'est l'approche que j'avais commencer à voir jusqu'à quel point j'ai eu:
De sorte qu'il serait quelque chose comme ceci:
code:
Je l'ai eu à travailler, mais les mises en garde étaient trop lourd à porter. Tout d'abord, vous ne pouvez pas simplement appeler ChangePassword sur hachés fournisseur car vous devez fournir le mot de passe actuel (qui il tente de hachage afin de la comparer à la valeur db, ce qui n'est pas haché). Donc, vous devez appeler ResetPassword pour obtenir une temporaire de hachage de mot de passe, afin de l'appeler ChangePassword. La performance est le tueur. Vous avez besoin de récupérer chaque MembershipUser, puis d'appeler GetPassword, ResetPassword, et ChangePassword pour chaque. Plus de 3*N hits sur la db! J'ai enveloppé dans une transaction et rapidement épuisé mes conn piscine.
Je vais enquêter sur une procédure stockée CLR pour que je puisse appeler le fournisseur de mécanismes de chiffrement à partir de SQL. Je vais poster en arrière si cela fonctionne.
Bonne chance! Désolé ça n'a pas fonctionné comme prévu.
J'ai enfin eu un peu de temps pour jouer avec cela. Permettez-moi de dire que je ne comprends pas tout les détails de cette approche, mais je l'ai essayé sur un seul compte. Il compile et fonctionne très bien, et ChangePassword() renvoie la valeur true. Cependant, il ne semble pas de mise à jour de la base de données. Il montre encore la PasswordFormat est de 2 pour le compte de test dans le aspnet_Membership table. Ai-je raté quelque chose?
OriginalL'auteur Greg
De Greg solution est un bon début, mais il n'affecte pas les utilisateurs existants. Le SqlMembershipProvider protège les utilisateurs et les mots de passe par le stockage de la PasswordFormat (0=clair, 1=Haché, 2=Crypté) dans le tableau avec des mots de passe. Changer le fournisseur de format de mot de passe n'affecte que les insère dans les tables de l'utilisateur. Afin de convertir les utilisateurs existants mots de passe Hachés, vous devez modifier le PasswordFormat paramètre pour chaque entrée. Voici une façon simple de le faire:
+1 fonctionne parfaitement
Lors de l'obtention de tous les utilisateurs des mots de passe vous devez filtrer les utilisateurs exclus. Sinon, il va échouer sur la réinitialisation de mot de passe/changer de phase.
Chage ceci : var mots de passe = clearProvider.GetAllUsers(0, int.MaxValue, dontCare) .Cast<MembershipUser>().Où(u=> u.IsLockedOut==false && u.IsApproved==true).ToDictionary(u => u.Nom d'utilisateur, u => u.GetPassword());
btw, la plus récente .Mise à jour NET vous oblige à utiliser des mots de passe hachés ou de supporter sans escale critique des erreurs de Chiffrement = Mauvais.
OriginalL'auteur Dan Walton
Pour des raisons de sécurité, il est certainement la bonne décision de changer de mots de passe chiffrés à hachages dans votre base de données.
Généralement à créer des hachages de sortir de vos mots de passe cryptés, vous devez d'abord déchiffrer et ensuite de hachage. Sachez que vous allez perdre (enfin, lorsque vous basculez) les mots de passe d'origine. Au lieu de cela, vous allez avoir un unique empreinte (hash) des utilisateurs des mots de passe.
Pensez aussi à utiliser le sel pour le hachage (défense contre rainbow tables etc.) et aussi jeter un oeil à ralentir les algorithmes de hachage comme BCrypt (Codeplex & Article: Comment Faire Pour Stocker En Toute Sécurité D'Un Mot De Passe) pour des raisons de sécurité, au lieu de rapide comme MD5.
Gardez également à l'esprit, qu'il sera bien plus d'effort pour changer l'algorithme de hachage à l'avenir qu'un changement de ecryption de hachage. Si vous voulez le faire dès la première fois 😉
ASP.NET l'adhésion de l'algorithme de hachage par défaut est SHA1 et ils utilisent le sel codé en Base64.
OriginalL'auteur Martin Buberl
Je vous mets en garde contre le hachage des mots de passe au hasard, car il ya beaucoup de mises en garde de cette approche. Cette Blog sur le hachage des mots de passe a été très perspicace pour moi, et je pense que vous devriez le lire. Pourquoi voulez-vous les mots de passe hachés au lieu de cryptées?
OriginalL'auteur Jeffrey Greenham