我的数据库保存的密码是使用ASP.NET标识进行哈希处理的。虽然将使用 Crypto.HashPassword 对用户键入的密码进行哈希处理(不知道此类是否为ASP.NET标识)。
我如何比较这两个?
如果两个密码匹配,则应返回“true”,否则为false。我现在处于一个令人困惑的阶段。希望您能够帮助我。感谢。
以下是我的一些代码。
LoginController.cs
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.Entity;
using System.Data.Entity.Infrastructure;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Web.Http;
using System.Web.Http.Description;
using WebFormsDemo;
using WebFormsDemo.ViewModel;
using System.Security.Cryptography;
using System.Web.Helpers;
using Microsoft.AspNet.Identity;
using Microsoft.AspNet.Identity.Owin;
using Microsoft.Owin.Security;
using Microsoft.AspNet.Identity.EntityFramework;
namespace WebFormsDemo.Controllers
{
public class LoginController : ApiController
{
private EBMSEntities db = new EBMSEntities();
// GET: api/Login
[Route("api/Login/Search/{username}/{password}")]
[ResponseType(typeof(List<AspNetUser>))]
public bool getUsernamePassword(string username, string password)
{
var hashedPassword = "";
hashedPassword = Crypto.HashPassword(password);
var pass = (from u in db.AspNetUsers
where u.UserName.Equals(username)
select u.PasswordHash).Take(1);
string hashpassinDb = Convert.ToString(pass.FirstOrDefault());
return Crypto.VerifyHashedPassword(hashpassinDb, hashedPassword);
}
}
}
答案 0 :(得分:1)
密码哈希值通常使用PasswordHasher类中的VerifyHashedPassword方法进行比较。点击此链接:Verifies that a password matches the hashed password.
修改强>
根据评论事实证明,使用Crypto.HashedPassword将产生与我的数据库中保存的哈希值不同的哈希值。
您需要提供cell.indentationLevel = 10;
实施,可以提供无需散列的明确密码。
IPasswordHasher
将为您提供明确的密码,您可以使用该密码与输入的密码进行比较。
答案 1 :(得分:0)
返回Crypto.VerifyHashedPassword的第二个参数并不意味着要进行哈希处理,它的意思是纯文本。