public ActionResult PassWord(int id, Propietario propietario, string ClaveNueva, string claveRepetida) { Propietario propi = null; try { propi = propietarios.ObtenerPorId(id); // verificar clave antigüa var pass = Convert.ToBase64String(KeyDerivation.Pbkdf2( password: propietario.Clave ?? "", salt: System.Text.Encoding.ASCII.GetBytes("SALADA"), prf: KeyDerivationPrf.HMACSHA1, iterationCount: 1000, numBytesRequested: 256 / 8)); if (propi.Clave != pass || ClaveNueva != claveRepetida) { ViewBag.Mensaje = "Datos inválidos"; //se rederige porque no hay vista de cambio de pass, está compartida con Edit return(RedirectToAction("PassWord", new { id = id })); } else { var nueva = Convert.ToBase64String(KeyDerivation.Pbkdf2( password: ClaveNueva ?? "", salt: System.Text.Encoding.ASCII.GetBytes("SALADA"), prf: KeyDerivationPrf.HMACSHA1, iterationCount: 1000, numBytesRequested: 256 / 8)); propietarios.ActualizarClave(id, nueva); TempData["Id"] = "actualizó la contraseña"; return(RedirectToAction(nameof(Index))); } } catch (Exception ex) { TempData["Error"] = ex.Message; TempData["StackTrace"] = ex.StackTrace; return(RedirectToAction("PassWord", new { id = id })); } }