Nous créons un nouveau site à l'aide du fournisseur d'adhésion ASP.NET pour l'enregistrement et la connexion de l'utilisateur. Nos mots de passe de l'ancienne système crypté de système afin que nous puissions les récupérer si nous avions besoin. P>
J'ai beaucoup de difficulté à comprendre s'il est possible d'utiliser des fonctions d'adhésion ASP.NET pour chiffrer simplement le mot de passe lorsque l'utilisateur enregistre, puis l'orienter pour que je puisse le voir. P>
Documentation pour cela est voisin inexistant. P>
Je sais comment configurer web.config pour que cela stocke des mots de passe comme crypté ala PasswordFormat = "crypté" dans le fournisseur et attribuant une validationKey dans la machineKey, mais il semble que le mot de passe est toujours haché (bien que cela soit peut-être juste bien crypté). De toute façon, je ne peux pas décaper la manière dont le mot de passe peut être récupéré (par nous) si nécessaire. P>
Merci! P>
4 Réponses :
Vous devez utiliser PasswordFormat = "chiffré" plutôt que par mot de passeformat = "haché". Ensuite, vous pouvez utiliser le Décryptepassword Method of the MemberProvider pour déchiffrer le mot de passe si nécessaire. P>
Je suppose que vous utilisez l'utilisation du SQLMembershipProvider a> que la SP fournit. Si tel est le cas, pourquoi ne pas utiliser la fonction de questions intégrée et répondez à la fonctionnalité pour permettre à l'utilisateur de réinitialiser leur mot de passe. Alternativement (ou en outre) réinitialiser leur mot de passe pour eux et envoyez-en un courrier électronique à celui-ci. De cette façon, votre application ne peut pas exposer un mot de passe d'utilisateur à personne accidentellement. P>
Si vous avez vraiment besoin de déchiffrer leurs mots de passe, le mot de passe doit être défini sur "crypté". Voir DecryptPassword pour plus d'informations sur le déchiffrement le mot de passe. Pour plus de détails sur la configuration de Diffrigtion, voir le PasswordFormat , note que vous devez spécifier l'attribut de déchiffrement de l'élément de la machine. P>
Je suis au courant de DecryptPassword mais je ne peux pas obtenir VWD2010 de la reconnaître comme une méthode. Peu importe les références que je fournis ou des espaces de noms que j'utilise. Une idée de cette idée c'est le cas?
Essayez d'utiliser system.web.security.membership.default.decryptpassword. DecryptPassword fait partie de la signature de la classe des membresProvider afin qu'il soit là. Notez que System.Web.Security.Membership est une classe statique qui n'expose pas les mêmes méthodes que les classes de mise en œuvre.
Stockage des mots de passe au format récupérable est une très mauvaise idée. Si vous pouvez les récupérer, quiconque peut-il enfreindre votre serveur. p>
Vous ferez mieux d'utiliser une approche standard Hash + Sel et d'avoir un mécanisme de réinitialisation de mot de passe pour gérer le cas où les utilisateurs oublient leur mot de passe. P>
C'est une possibilité. Ce serait très mauvais de relations publiques si les informations de compte sont jamais sorties.
Le fournisseur d'adhésion ASP.NET ne prend-il pas en charge les mots de passe cryptés par défaut? Cela signifie que le mot de passe est transmis dans le texte haché et stocké dans le format hachédisé. Avez-vous besoin de plus que cela?
Juste pour clarifier, l'adhésion ASP.NET prend en charge les formats clairs, hachés et cryptés hors de la boîte. Hashed est la valeur par défaut et est un moyen seulement (le meilleur pour la plupart des situations). Crypté permet le décryptage du mot de passe.
Imports System.Web.Security Public Class PasswordRecovery Inherits SqlMembershipProvider Public Function GetDecryptedPassword(ByVal password As String) As String Try Dim _encodedPassword() As Byte = Convert.FromBase64String(password) Dim _bytes() As Byte = DecryptPassword(_encodedPassword) If _bytes Is Nothing Then Return "" Else Return System.Text.Encoding.Unicode.GetString(_bytes, &H10, _bytes.Length - &H10) End If Catch ex As Exception Throw New Exception("Error decrypting password.", ex) End Try End Function End Class
Dim _bytes () As Byte = DecryptPassword (_EncodedPassword) Donner une erreur Impossible de trouver DecryptPassword
lien DecryptPassword MSDN