我遇到了代码:
MembershipUser u = Membership.GetUser();
u.ChangePassword(u.ResetPassword(), "Password"); //where will I get the "Password" from
我不明白我的意思 获取客户端密码,因为用户忘记了他的旧密码。 我想添加一个重置功能,可以生成随机密码和 向具有userid和随机生成密码的特定客户端发送电子邮件。在他/她能够更改密码之后。
答案 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
。
这将:
将用户密码重置为新的自动生成的密码。