C# 散列密码并存储在新数据库中,因为旧数据库已被排除
这个register函数是在我填写注册表后调用的,但是我刚刚用一个新创建的sdf数据库替换了默认的mdf数据库,我还想使用md5散列成员的密码。在上面的源代码中,我应该在哪里添加这样的函数C# 散列密码并存储在新数据库中,因为旧数据库已被排除,c#,asp.net-mvc,asp.net-mvc-3,C#,Asp.net Mvc,Asp.net Mvc 3,这个register函数是在我填写注册表后调用的,但是我刚刚用一个新创建的sdf数据库替换了默认的mdf数据库,我还想使用md5散列成员的密码。在上面的源代码中,我应该在哪里添加这样的函数 [更新]看起来您正在使用ASP.Net成员API来完成此任务。知道了这一点,我将尝试使您针对此API使用的代码忠实于API的目的。在将密码传递给API之前,我不会对其进行哈希运算。在保存密码之前,我会在MembershipProvider中对其进行散列;在任何密码验证程序之前,我都会对它进行哈希运算。这将把密
[更新]看起来您正在使用ASP.Net成员API来完成此任务。知道了这一点,我将尝试使您针对此API使用的代码忠实于API的目的。在将密码传递给API之前,我不会对其进行哈希运算。在保存密码之前,我会在MembershipProvider中对其进行散列;在任何密码验证程序之前,我都会对它进行哈希运算。这将把密码哈希实现的细节保留在应用程序代码之外,而应用程序代码只知道如何与ASP.Net成员API接口 因此,您应该了解如何配置您的成员资格提供程序。我不确定默认的SQL MembershipProvider是否能够自动执行此操作,但如果能够,那就太好了。否则,您可能会用自己的实现覆盖SQL成员资格提供程序 参考作为起点[1],它描述了SqlMembershipProvider类
[1] 请不要使用MD5进行密码散列-在这一点上它非常不安全(谷歌搜索会导致很多破解工具)。在执行单向散列之前添加盐也是最佳做法。请从投票率最高的回复中查看:
public ActionResult Register(RegisterModel model)
{
if (ModelState.IsValid)
{
// Attempt to register the user
MembershipCreateStatus createStatus;
Membership.CreateUser(model.UserName, model.Password, model.Email, null, null, true, null, out createStatus);
if (createStatus == MembershipCreateStatus.Success)
{
FormsAuthentication.SetAuthCookie(model.UserName, false /* createPersistentCookie */);
return RedirectToAction("Index", "Home");
}
else
{
ModelState.AddModelError("", ErrorCodeToString(createStatus));
}
}
// If we got this far, something failed, redisplay form
return View(model);
}