2012-12-18 30 views
0

我正试图迁移到新的通用会员供应商(来自家庭酿造解决方案)。我已将我们的旧用户表迁移到Users/Membershiphips表。将用户迁移到通用会员供应商

当我运行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); 

这些似乎都不起作用。我错过了什么?

Scott

+1

您是否使用家庭自定义代码进行编码并使用成员资格提供程序的默认编码方法进行验证? – Win

+0

我没有使用家庭酿造。我正在使用通用提供程序。因此,用户信用使用HMACSHA256算法w/salt进行哈希处理。改变了我如何生成这一切。将更新。 –

回答

0

Bah,回答了。

因此,所有这一步的第1步是将用户从我们的双向加密密码迁移到单向散列。

我看到的每个例子都是这样做的,包括手动散列密码。结果Membership.CreateUser(username,password);散列密码(和盐),所以我哈希散列密码,这就是为什么auth失败。

我只需调用Membership.CreateUser,传入用户名&纯文本传递,它的工作。 WEEE!