如何在MVC5中解密密码?

时间:2016-09-26 08:54:00

标签: asp.net-mvc asp.net-identity

我正在使用MVC5,我知道如果用户忘记了密码,那么MVC会提供忘记密码和重置密码的功能。 我的客户端服务器与Internet或邮件断开连接,它位于防火墙后面,因此我无法使用忘记密码,因为它可能会生成重置密码的链接,但无法将其邮寄给用户以方便密码重置。 请通过简单地使用成员类的GetPassword方法,建议是否有任何方法可以解密密码(让用户知道他是否忘记了密码),例如asp.net成员资格如何。

谢谢

2 个答案:

答案 0 :(得分:2)

据我所知,在MVC5中没有简单的方法可以做到这一点,因为Identity(下一代会员制)使用密码哈希而不是加密密码。

密码被散列并作为哈希存储在db中 - 通常是单向操作(这意味着没有简单的方法来获取密码形式哈希)。

你可以在这里阅读更多关于哈希和盐析的内容:

答案 1 :(得分:0)

这一步在asp.net mvc5中生成并解密密码。

  1. 创建班级名称Hashing,粘贴此代码

    private static string GetRandomSalt()
    
            {
                return BCrypt.Net.BCrypt.GenerateSalt(12);
            }
    
            public static string HashPassword(string password)
            {
                return BCrypt.Net.BCrypt.HashPassword(password, GetRandomSalt());
            }
    
            public static bool ValidatePassword(string password, string correctHash)
            {
                return BCrypt.Net.BCrypt.Verify(password, correctHash);
            }
    
  2. 通过此代码创建控制器登录

    using WebBcryptMVC.Models; // 
    using WebBcryptMVC.Util; // call folder name of Hashing class
    
    namespace WebBcryptMVC.Controllers
    {
        public class LoginController : Controller
        {
    
            private DBLoginEntities db = new DBLoginEntities();
    
            public ActionResult frmLogin()
            {
                return View("frmLogin", new tblLogin());
            }
    
    
            [HttpPost]
            public ActionResult frmLogin(tblLogin account)
            {
                var currentAccount = db.tblLogins.First(a => a.UserName.Equals(account.UserName));
                if ((currentAccount != null))
                {
                    if (Hashing.ValidatePassword(account.Password, currentAccount.Password))
                    {
                        Session.Add("UserName", account.UserName);
                        //return View("~/Views/Home/frmHome.cshtml");
                        return RedirectToAction("frmHome", "Home");
                    }
                    else
                    {
                        ViewBag.error = "Invalid";
                        return View("frmLogin");
                    }
                }
                else
                {
                    ViewBag.error = "Invalid";
                    return View("frmLogin");
                }
            }