[英]ASP.NET Identity's way of hashing password Compared to Crypto.HashPassword
今天是個好日子。 我目前正在Xamarin.Forms Portable應用程序中創建一個登錄表單。 我有一個WebFormsProject,其中創建了一個API控制器,該控制器將用戶鍵入的用戶名和密碼與保存在數據庫中的用戶名和密碼進行比較。
我的數據庫中保存的密碼使用ASP.NET Identity加密。 雖然將使用Crypto.HashPassword對用戶輸入的密碼進行哈希處理 (不知道此類是否是ASP.NET Identity。)。
如何比較這兩個?
如果兩個密碼匹配,則應返回“ 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);
}
}
}
通常使用PasswordHasher類中的VerifyHashedPassword方法對密碼哈希進行比較。 檢查此鏈接: 驗證密碼是否與哈希密碼匹配。
編輯:
根據評論事實證明,使用Crypto.HashedPassword將產生與存儲在數據庫中的哈希值不同的哈希值。
您需要提供IPasswordHasher
實現,該實現可以提供清晰的密碼而不進行哈希處理。
public class ClearPassword : IPasswordHasher
{
public string HashPassword(string password)
{
return password;
}
}
將為您提供明確的密碼,您可以將其與輸入的密碼進行比較。
返回Crypto.VerifyHashedPassword的第二個參數不是要散列,而是純文本。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.