8
votes

Comment? Crypter et déchiffrer les mots de passe d'adhésion des utilisateurs dans ASP.NET

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.

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.

Documentation pour cela est voisin inexistant.

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.

Merci!


0 commentaires

4 Réponses :


5
votes

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.


0 commentaires

0
votes

2 commentaires

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.



10
votes

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.

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.


3 commentaires

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.



1
votes
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

2 commentaires

Dim _bytes () As Byte = DecryptPassword (_EncodedPassword) Donner une erreur Impossible de trouver DecryptPassword


lien DecryptPassword MSDN