我收到了这个注册表,我收到了用户的电子邮件和密码,并使用SHA512哈希密码
public Boolean IsRegistered(String email, String pass)
{
SHA512 shaM = new SHA512Managed();
if (pass.Length > 0 && email.Length > 0)
{
byte[] data = Encoding.UTF8.GetBytes(pass);
String encryptedpass = Encoding.UTF8.GetString(shaM.ComputeHash(data));
using (ModelContainer db = new ModelContainer())
{
//User usr = db.UserSet.Where(u => u.PasswordDigest == encryptedpass && u.Email == email).First();
int matches = (from u in bd.UserSet
where u.PasswordDigest == encryptedpass&& u.Email == email
select new
{
Id = u.Id
}
).Count();
if (matches > 0)
{
return true;
}
}
}
return false;
}
每次用户登录时都使用此方法,它就像魅力(我猜), 事情是,当我提示用户更改他/她的密码我似乎无法验证旧的这里是我尝试
我执行以下操作来检索MyAccount表单构造函数
上的用户数据 User user;.
public MyAccount()
{
InitializeComponent();
try
{
using (ModelContainer db = new ModelContainer())
{
user = (from u in db.UserSet where u.Id == 2 select u).First();
txtName.Text = user.Name;
txtEmail.Text = user.Email;
}
}
catch (Exception x)
{
ErrorAlert error = new ErrorAlert("Error: " + x.Message);
error.Owner = getParentWindow();
error.ShowDialog();
}
}
然后我在表单button_click
上验证它using (ModelContainer db = new ModelContainer())
{
SHA512 shaM = new SHA512Managed();
string oldpass = Encoding.UTF8.GetString(shaM.ComputeHash(Encoding.UTF8.GetBytes(ptxtOldPassword.Password)));
shaM.Dispose();
db.UserSet.Attach(user);
Regex rgx = new Regex(@"\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z");
if (rgx.IsMatch(txtEmail.Text))
{
if (oldpass == user.PasswordDigest)
{
if (ptxtNewPassword.Password.Equals(ptxtNewPassword2.Password))
{
string newpass = Encoding.UTF8.GetString(shaM.ComputeHash(Encoding.UTF8.GetBytes(ptxtNewPassword.Password)));
user.Name = txtName.Text;
user.Email = txtEmail.Text;
user.PasswordDigest = newpass;
db.SaveChanges();
}
else
{
ErrorAlert error = new ErrorAlert("Passwords do not match");
error.Owner = getParentWindow();
error.ShowDialog();
}
当我将数据库中的旧密码与用户输入的密码匹配时,它们不匹配,因为它们是字符串我尝试使用等于没有运气我认为==会工作但是我错了,我看着其他回答并发现这个Sha512 not returning equal in c# hash validation遗憾的是它对我不起作用,我需要理解为什么我的第一次验证工作和第二次验证不起作用
所以任何帮助都是合法的Have a nice day
答案 0 :(得分:0)
您不需要比较最终字符串,在字节级别进行测试。 Check this之前的问题。
此外,如果您已经验证了用户的存在(通过电子邮件或任何其他机制),为什么不使用新密码更改/更新?您可以使用电子邮件进行验证,并重新使用登录/登录的工作功能。