[英]Hashing method used in ASP.NET Identity
我正在Xamarin.Forms Portable應用程序中創建一個登錄表單。 我有一個WebFormsProject,其中創建了一個API控制器,用於比較用戶輸入的用戶名和密碼與數據庫中保存的用戶名和密碼。
我的數據庫中保存的密碼使用ASP.NET Identity加密。 雖然將使用Crypto.HashPassword對用戶輸入的密碼進行哈希處理(不知道此類是否是ASP.NET Identity。)。
我測試使用它輸入我的用戶名和密碼:
〔路線( “API /登錄/搜索/ {用戶名} / {密碼}”)]
當我使用斷點嘗試密碼中的鍵的哈希值是多少時,我得到了:
AL6kLGQYs3xeCtNkpJuAem43HOEvSpwzSfy5zCK0MviBGuS67Sp + ct0lNfJTd602Uw ==
雖然我數據庫中的密碼具有以下哈希值:
AMlco7zkLpj5alL2MP1VEXQlRbcD2sdTdKB3JvTLzYMMwSUC5vSfhI4MloLLw70Erg ==
即使我輸入了相同的密碼,我也不知道為什么它們具有不同的哈希值。
如果兩個密碼匹配,則應返回“ true”,否則返回false。 我現在處於混亂狀態。 希望您能夠幫助我。 我想知道ASP.NET Identity使用哪種哈希方法? 謝謝。
這是我的一些代碼。
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();
[Route("api/Login/Search/{username}/{password}")]
[ResponseType(typeof(List<AspNetUser>))]
public bool getUserPassword(string username, string password)
{
var hashedPassword = "";
hashedPassword = Crypto.HashPassword(password);
var user = (from u in db.AspNetUsers
where u.UserName.Equals(username)
&& u.PasswordHash.Equals(hashedPassword)
select u).ToList();
if (user.Count() != 0)
{
return true;
}
return false;
}
}
}
Crypto.HashPassword使用RFC 2898並為您創建鹽
密碼散列是通過RFC 2898算法使用128位鹽,256位子項和1000次迭代生成的。 生成的哈希字節流的格式為{0x00,salt,subkey},在返回之前以base-64編碼。
您必須使用Crypto.VerifyHashedPassword來比較密碼
public static bool VerifyHashedPassword(
string hashedPassword,
string password
)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.