2016-09-02 1 views
0

Guten Tag alle. Ich erstelle gerade ein Login-Formular in Xamarin.Forms Portable-Anwendung. Ich habe ein WebFormsProject, bei dem ich einen API-Controller erstellt habe, der den Benutzernamen und das Passwort, die vom Benutzer eingegeben wurden, mit dem Benutzernamen und dem Passwort vergleicht, die in meiner Datenbank gespeichert sind.ASP.NET Identität Weg Hash-Passwort im Vergleich zu Crypto.HashPassword

Das Kennwort, das in meiner Datenbank gespeichert wird, wird mit ASP.NET Identity Hashed. Das Kennwort, das vom Benutzer eingegeben wird, wird mit Crypto.HashPassword (weiß nicht, ob diese Klasse eine ASP.NET-Identitätssache ist) gehashed.

Wie kann ich diese beiden vergleichen?

Wenn die beiden Passwörter übereinstimmen, sollte 'true' zurückgegeben werden, andernfalls false. Ich bin gerade in einer verwirrenden Phase. Hoffe, du kannst mir helfen. Vielen Dank.

Hier sind einige meiner Codes.

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); 




     } 

    } 
} 

Antwort

1

Passwort-Hashes ist in der Regel im Vergleich von der PasswordHasher Klasse der Methode VerifyHashedPassword verwenden. überprüfen Sie diesen Link: Verifies that a password matches the hashed password.

Edit:
Wie pro Kommentar Es stellt sich heraus, dass Crypto.HashedPassword verwendet, wird ein Hash-Wert unterscheidet sich von dem Hash-Wert gespeichert auf meine Datenbank erzeugen.

Sie müssen IPasswordHasher Implementierung bereitstellen, die ein klares Kennwort ohne Hashing bereitstellen kann.

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

Gibt Ihnen ein klares Passwort, das Sie mit dem eingegebenen Passwort vergleichen können.

+0

was soll ich damit machen? Es ist nur eine Erklärung? Welcher Hashalgorithmus wird in ASP.NET Identity verwendet? –

+1

@JayceeEvangelista, * was soll ich damit machen? * Sie können dies verwenden und Ihr Problem lösen, * Es ist nur eine Erklärung? * Ja, ist es. * Welcher Hashalgorithmus wird in der ASP.NET-Identität verwendet? * Ist das Gleiche: https: //brockallen.com/2012/10/19/password-management-made-easy-in-asp-net-with-the- crypto-api /) –

+0

Ich habe es auf meinen Code angewendet. Es stellt sich heraus, dass die Verwendung von Crypto.HashedPassword einen Hash-Wert erzeugt, der sich von dem in meiner Datenbank gespeicherten Hash-Wert unterscheidet. Einfach weil sie unterschiedliche Hashalgorithmen haben. –

0

Der zweite Parameter, der Crypto.VerifyHashedPassword zurückgibt, ist nicht als Hashwert gedacht, sondern als reiner Text.

Verwandte Themen