ASP.NET Identity的哈希密码方式与Crypto.HashPassword相比

时间:2016-09-02 09:54:18

标签: c# asp.net xamarin xamarin.forms asp.net-identity

大家好日子。我目前正在Xamarin.Forms Portable应用程序中创建一个登录表单。我有一个WebFormsProject,其中我创建了一个API控制器,用于比较用户键入的用户名和密码与我的数据库中保存的用户名和密码。

我的数据库保存的密码是使用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);




        }

    }
}

2 个答案:

答案 0 :(得分:1)

密码哈希值通常使用PasswordHasher类中的VerifyHashedPassword方法进行比较。点击此链接:Verifies that a password matches the hashed password.

修改
根据评论事实证明,使用Crypto.HashedPassword将产生与我的数据库中保存的哈希值不同的哈希值。

您需要提供cell.indentationLevel = 10; 实施,可以提供无需散列的明确密码。

IPasswordHasher

将为您提供明确的密码,您可以使用该密码与输入的密码进行比较。

答案 1 :(得分:0)

返回Crypto.VerifyHashedPassword的第二个参数并不意味着要进行哈希处理,它的意思是纯文本。