0

カスタムメンバーシッププロバイダを実装しました。 私は、MembershipProviderの抽象EncryptPassword/DecryptPasswordをオーバーライドするカスタムAES暗号化/復号化も実装しました。カスタムMembershipProviderのパスワードの使用を暗号化/復号化しますか?

しかし、ValidateUserを起動すると、パスワードは自動的に変換されません。何か不足していますか?

自動的に呼び出されるはずか、コードからこのメソッドを呼び出す必要がありますか?

+1

私はのMembershipProviderに慣れていないんだけど、それは解読パスワードを保存するために、ほとんど常に間違っています。あなたはSHA256のような一方向ハッシュを使用する必要があります。そのパスワードを別の平文認証システムに使用して認証する必要がある場合は例外です。 – MichaelGG

+0

imは暗号化されたパスワードをvarbinaryに格納します。 ユーザーがログインすると解読されます。 – Shimmy

答えて

2

あなた自身で暗号化ルーチンを呼び出す必要があります。

+0

したがって、DecryptPassword関数を新しいものとして宣言できますか? 基本クラスのパターンではなく、公開されている新しい文字列DecriptPassword(byte [] password) public byte [] DecryptPassword(byte [] password)? – Shimmy

+1

メンバシッププロバイダを実装する場合は、 "new"を使用するのではなく、関数をオーバーライドするだけで済みます。そして、ValidateUserのようにプレーンテキストとの間でパスワードを変換する必要がある場合は、適切な関数を呼び出すことができます。 彼らがインターフェイスにいる理由は、使用している暗号化アルゴリズムが暗いのではなく、プロバイダのコンシューマにパスワードを暗号化/復号化する一貫した方法を与えることです。 – womp

+0

ありがとう、私は本当に感謝します – Shimmy

0

あなたが暗号化/復号化メソッドへの呼び出しを含める必要があり、やるべきようなもの:

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

あなたはパスワードを解読するべきではありません。あなたができるならば、他の人はできますし、それを平文で保存することもできます。非常に悪い習慣。 –

+4

私はちょうど誰かelses質問に答えることを試みた。誰かがあなたが悪い練習と考える何かをする必要があるからではありません。あなたはその質問に答えて、彼がやりたいことを悪い練習であると伝えなければなりません! –

関連する問題