Asp.net 将用户迁移到通用成员资格提供程序
我正在尝试迁移到新的通用成员资格提供商(从家用brew解决方案)。我已将旧用户表迁移到用户/成员身份表 当我运行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
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对用户凭据进行散列。改变了我产生这些的方式。将更新。