Mam problem z biblioteką bcrypt. Używam hashowania hasła po stronie Angulara i przekazuję hash do backendu w .Net Core, żeby sprawdzić czy wprowadzony hash jest zgodny z tym co siedzi w bazie. Na froncie używam bcryptjs, na backendzie BCrypt.Net. Gdy sprawdzam hashe metodą .Verify()
, metoda zawsze zwraca false. Próbowałem nawet zamockować dane w postaci dwóch zmiennych, do których wpisałem identycznego stringa i użyłem metody .HashPassword()
. Metoda .Verify()
nawet na tych danych zwróciła wartość false.
Czy ktoś wie w czym jest problem? Wygląda na to, że niepoprawnie używam BCrypt na backendzie, ale nie wiem dlaczego nawet przy zamockowanych danych Verify zwraca false.
Kawałek kodu, który sprawdza te hashe:
Backend:
//Dane zamockowane
string pass1 = "test1234";
string pass2 = "test1234";
var p1 = BCrypt.Net.BCrypt.HashPassword(pass1);
var p2 = BCrypt.Net.BCrypt.HashPassword(pass2);
var ret = BCrypt.Net.BCrypt.Verify(p1, p2);
//Dane właściwe do sprawdzenia
string passwordHashFromDb = _userRepository.GetPasswordHashByUserEmail(email);
return BCrypt.Net.BCrypt.Verify(passwordHash, passwordHashFromDb);
Front:
const salt = bcrypt.genSaltSync();
var passwordHash = bcrypt.hashSync(this.loginFormModel.value.Password as string, salt);
const params = new HttpParams()
.set('email', this.loginFormModel.value.Email as string)
.set('passwordHash', passwordHash);
return this.client.get(this.baseUrl + ApiPaths.SignIn, {params});