0

私は新しいユニバーサルメンバーシッププロバイダーに移行しようとしています(自作ソリューションから)。古いUserテーブルをUsers/Membershipsテーブルに移行しました。

を実行するMembership.ValidateUser(txtUsername.Text.Trim(), txtPassword.Text.Trim())と、ユーザー名/パスワードが正しいことがわかっていても、常にfalseが返されます。

パスワード、ハッシュ、ソルトを生成した方法は次のとおりです。

var salt = Crypto.GenerateSalt();
var hashedPassword = this.GenerateHashWithSalt(password, salt);

これは私が使用しているGenerateHashWithSaltメソッドです

private string GenerateHashWithSalt(string password, string salt)
{
    string hashWithSalt = password + salt;
    byte[] saltedHashBytes = Encoding.UTF8.GetBytes(hashWithSalt);

    HashAlgorithm algo = HashAlgorithm.Create(Membership.HashAlgorithmType);

    byte[] hash = algo.ComputeHash(saltedHashBytes);

    return Convert.ToBase64String(hash);
}

私も一緒に行きました:

var salt = Crypto.GenerateSalt();
var saltedPassword = password + salt;
var hashedPassword = Crypto.HashPassword(saltedPassword);

これらはどちらも機能していないようです。私は何が欠けていますか?

スコット

4

1 に答える 1

0

ああ、答えた。

したがって、これらすべてのステップ1は、ユーザーを双方向暗号化パスワードから一方向ハッシュに移行することでした。

私が見たすべての例には、パスワードを手動でハッシュすることが含まれていました。Membership.CreateUser(username,password);パスワード(およびソルト)がハッシュ化されていることが判明したため、ハッシュ化されたパスワードをハッシュ化していたため、認証が失敗していました。

Membership.CreateUserを呼び出して、ユーザー名とプレーンテキストパスを渡すだけで、機能しました。ウィー!

于 2012-12-19T18:23:51.167 に答える