如何重置&在MVC中更改asp.net成员资格提供程序中的哈希密码

时间:2011-07-26 10:29:27

标签: asp.net passwords asp.net-membership membership

我遇到了代码:

MembershipUser u = Membership.GetUser();
u.ChangePassword(u.ResetPassword(), "Password"); //where will I get the "Password" from 

我不明白我的意思     获取客户端密码,因为用户忘记了他的旧密码。     我想添加一个重置功能,可以生成随机密码和     向具有userid和随机生成密码的特定客户端发送电子邮件。在他/她能够更改密码之后。

2 个答案:

答案 0 :(得分:3)

您可以使用Membership GeneratePassword方法

生成这样的随机密码
string password = System.Web.Security.Membership.GeneratePassword(14, 0);

如果您需要创建自己的salt并哈希一个新密码,这里的实现与成员代码大致相同:

public class Cryptographer : ICryptographer
{
    #region ICryptographer Members

    public string CreateSalt()
    {
        byte[] data = new byte[0x10];
        new RNGCryptoServiceProvider().GetBytes(data);
        return Convert.ToBase64String(data);
    }

    /// <summary>
    /// Hash the password against the salt
    /// </summary>
    /// <param name="pass">Plain password</param>
    /// <param name="salt">Salt string</param>
    /// <returns>Encrypted password</returns>
    public string HashPassword(string password, string salt)
    {
        byte[] bytes = Encoding.Unicode.GetBytes(password);
        byte[] src = Convert.FromBase64String(salt);
        byte[] dst = new byte[src.Length + bytes.Length];
        byte[] inArray = null;
        Buffer.BlockCopy(src, 0, dst, 0, src.Length);
        Buffer.BlockCopy(bytes, 0, dst, src.Length, bytes.Length);
        HashAlgorithm algorithm = HashAlgorithm.Create(System.Web.Security.Membership.HashAlgorithmType);
        inArray = algorithm.ComputeHash(dst);
        return Convert.ToBase64String(inArray);
    }

    #endregion
}

答案 1 :(得分:1)

ChangePassword方法的第二个参数是一个字符串,它代表您要为该用户使用的新密码。

您可以将此更改为您想要的任何字符串,甚至是您将通过电子邮件发送给用户的自动生成的字符串。

<强>更新

要回答您的新问题,我相信所有哈希密码等都由会员提供商处理。

如果您只想将用户密码重置为随机新值,则最好使用ResetPassword方法而不是ChangePassword

这将:

  

将用户密码重置为新的自动生成的密码。