0

我正在尝试迁移到新的 Universal Membership 提供商(从自制解决方案)。我已将旧的 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

呸,回复了。

因此,所有这一切的第一步是将用户从我们的 2 路加密密码迁移到 1 路哈希。

我看到的每个例子都包括手动散列密码。结果是Membership.CreateUser(username,password);对密码(和盐)进行哈希处理,所以我正在对哈希密码进行哈希处理,这就是身份验证失败的原因。

我只需要调用 Membership.CreateUser,传入用户名和纯文本通道,它就可以工作了。哇!

于 2012-12-19T18:23:51.167 回答