Asp.net 将用户迁移到通用成员资格提供程序

Asp.net 将用户迁移到通用成员资格提供程序,asp.net,asp.net-membership,Asp.net,Asp.net Membership,我正在尝试迁移到新的通用成员资格提供商(从家用brew解决方案)。我已将旧用户表迁移到用户/成员身份表 当我运行Membership.ValidateUser(txtsername.Text.Trim(),txtPassword.Text.Trim())时,它总是返回false,即使我知道用户名/密码是正确的 下面是我如何生成密码、哈希和salt的: var salt = Crypto.GenerateSalt(); var hashedPassword = this.GenerateHashW

我正在尝试迁移到新的通用成员资格提供商(从家用brew解决方案)。我已将旧用户表迁移到用户/成员身份表

当我运行
Membership.ValidateUser(txtsername.Text.Trim(),txtPassword.Text.Trim())
时,它总是返回false,即使我知道用户名/密码是正确的

下面是我如何生成密码、哈希和salt的:

var salt = Crypto.GenerateSalt();
var hashedPassword = this.GenerateHashWithSalt(password, salt);
这是我正在使用的GenerateHashWithAlt方法

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);
这两个似乎都不起作用。我错过了什么

斯科特回答

所有这些的第一步就是将用户从双向加密密码迁移到单向散列

我看到的每个例子都包括手动对密码进行哈希运算。结果是
Membership.CreateUser(用户名、密码)
对密码(和salt)进行散列,所以我对散列密码进行了散列,这就是auth失败的原因


我只需调用Membership.CreateUser,传入用户名和纯文本密码,就可以了。威伊

您是否使用自制代码进行编码,并使用会员资格提供商的默认编码方法进行验证?我不会为此使用自制代码。我正在使用通用提供商。因此,使用HMACSHA256算法w/salt对用户凭据进行散列。改变了我产生这些的方式。将更新。