我正在使用MVC5,我知道如果用户忘记了密码,那么MVC会提供忘记密码和重置密码的功能。 我的客户端服务器与Internet或邮件断开连接,它位于防火墙后面,因此我无法使用忘记密码,因为它可能会生成重置密码的链接,但无法将其邮寄给用户以方便密码重置。 请通过简单地使用成员类的GetPassword方法,建议是否有任何方法可以解密密码(让用户知道他是否忘记了密码),例如asp.net成员资格如何。
谢谢
答案 0 :(得分:2)
据我所知,在MVC5中没有简单的方法可以做到这一点,因为Identity(下一代会员制)使用密码哈希而不是加密密码。
密码被散列并作为哈希存储在db中 - 通常是单向操作(这意味着没有简单的方法来获取密码形式哈希)。
你可以在这里阅读更多关于哈希和盐析的内容:
答案 1 :(得分:0)
这一步在asp.net mvc5中生成并解密密码。
创建班级名称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);
}
通过此代码创建控制器登录
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");
}
}