0

J'ai implémenté un fournisseur d'appartenances personnalisé. J'ai également implémenté mon chiffrement/déchiffrement AES personnalisé en remplaçant le résumé EncryptPassword/DecryptPassword du MembershipProvider. Cependant, quand je déclenche ValidateUser, le mot de passe n'est pas automatiquement converti, ai-je oublié quelque chose?Chiffrer/déchiffrer l'utilisation du mot de passe dans un MembershipProvider personnalisé?

Est-il supposé être appelé automatiquement ou dois-je appeler cette méthode à partir de mon code?

+1

Je ne suis pas familier avec MembershipProvider, mais il est presque toujours incorrect de stocker un mot de passe déchiffrable. Vous devriez utiliser un hachage à sens unique comme SHA256. Une exception serait si vous deviez vous authentifier en utilisant ce mot de passe pour un autre système d'authentification en clair. – MichaelGG

+0

im stocker les mots de passe cryptés dans varbinary. ils sont décryptés lorsque l'utilisateur se connecte. – Shimmy

Répondre

2

Vous devez appeler vos routines de cryptage vous-même.

+0

Donc, je peux déclarer la fonction DecryptPassword comme étant nouvelle? c'est-à-dire la nouvelle chaîne publique DecriptPassword (mot de passe byte []) au lieu du modèle de classe de base public byte [] DecryptPassword (byte [] mot de passe)? – Shimmy

+1

Si vous implémentez un fournisseur d'appartenances, vous devriez pouvoir remplacer les fonctions plutôt que d'utiliser "nouveau". Ensuite, partout où vous avez besoin de traduire un mot de passe vers/à partir du texte en clair, comme dans ValidateUser, vous pouvez simplement appeler la fonction appropriée. La raison pour laquelle ils sont dans l'interface est de donner un moyen cohérent de crypter/décrypter le mot de passe aux consommateurs de votre fournisseur, plutôt que d'être dans le noir quant à l'algorithme de cryptage que vous avez utilisé. – womp

+0

merci mec, je l'apprécie vraiment – Shimmy

0

Vous devez inclure les appels à vos méthodes de chiffrement/déchiffrement, quelque chose comme devrait le faire:

public override bool ValidateUser(string username, string password) 
{ 
    string password=query to get the password from the db/users_list; 

    return (CheckPassword(password, storedPassword)); 
} 

private bool CheckPassword(string password, string dbpassword) 
{ 
    string pwd1 = password; 
    string pwd2 = dbpassword; 

    pwd2 = UEncodePassword(dbpassword); 

    if (pwd1 == pwd2) return true; 

    return false; 
} 

private string UEncodePassword(string encodedPassword) 
{ 
    string password = encodedPassword; 
    password = Encoding.Unicode.GetString(DecryptPassword(Convert.FromBase64String(encodedPassword))); 

    return password; 
} 
+0

Vous ne devriez pas pouvoir décoder le mot de passe. Si vous le pouvez, les autres peuvent le faire et vous pourriez aussi bien le stocker en texte clair. Très mauvaise pratique. –

+4

Je viens d'essayer de répondre à quelqu'un d'autre question. Ce n'est pas parce que quelqu'un a besoin de faire quelque chose que vous considérez comme une mauvaise pratique que ma réponse doit être considérée comme erronée. Vous devriez répondre à la question et lui dire que c'est une mauvaise pratique ce qu'il veut faire! –

Questions connexes