簡體   English   中英

ASP.NET Identity中使用的哈希方法

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM