2016-09-02 14 views
0

おはようございます。私は現在、Xamarin.Formsポータブルアプリケーションでログインフォームを作成しています。私はWebFormsProjectを持っています。そこでは、ユーザーが入力したユーザー名とパスワードと、データベースに保存されたユーザー名とパスワードを比較するAPIコントローラーを作成しました。ASP.NETアイデンティティのパスワードをハッシングする方法Crypto.HashPasswordと比較して

データベースに保存されているパスワードは、ASP.NET IDを使用してハッシュされています。ユーザーが入力するパスワードは、Crypto.HashPassword(このクラスがASP.NET Identityのものかどうかはわかりません)を使用してハッシュされます。

どうすればこの2つを比較できますか?

2つのパスワードが一致した場合は '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); 




     } 

    } 
} 

答えて

1

パスワードハッシュは、通常PasswordHasherクラスからメソッドVerifyHashedPasswordを用いて比較します。それはCrypto.HashedPasswordを使用して、私のデータベースに保存されたハッシュ値とは異なるハッシュ値を生成することが判明したコメントを1として
Verifies that a password matches the hashed password.

編集:このリンクを確認してください。

ハッシュなしでクリアなパスワードを提供できるIPasswordHasherの実装を提供する必要があります。

public class ClearPassword : IPasswordHasher 
{ 
    public string HashPassword(string password) 
    { 
     return password; 
    } 
} 

入力したパスワードとの比較に使用できるクリアなパスワードが表示されます。

+0

どうすればよいですか?それは単なる宣言ですか? ASP.NETアイデンティティではどのようなハッシュアルゴリズムが使用されていますか? –

+1

@JayceeEvangelista、*これで何をすればいいですか?*これを使用して問題を解決することができます*単なる宣言ですか? * ASP.NETアイデンティティではどのようなハッシュアルゴリズムが使用されていますか?これは同じです:https://brockallen.com/2012/10/19/password-management-made-easy-in-asp-net-with-the- crypto-api /) –

+0

私のコードに適用しました。 Crypto.HashedPasswordを使用すると、データベースに保存されているハッシュ値とは異なるハッシュ値が生成されることがわかります。彼らは異なるハッシュアルゴリズムを持っているためです。 –

0

Crypto.VerifyHashedPasswordを返すための2番目のパラメータは、ハッシュされることを意味するものではなく、プレーンテキストです。

関連する問題