Próbuję sprawdzić czyjeś hasło podczas logowania.2 równe byte [] nie zwróci true
Biorę wprowadzone hasło i pobierać użytkownicy zapisany zaszyfrowany hasłem i hasło soli.
Następnie haszuję wprowadzone hasło z zapisaną solą, aby sprawdzić, czy jest ona równa zapisanemu hasłu.
Mimo że bajt [] storedPassword jest dokładnie taki sam, jak wpisane hasło byte [], nie zwraca ono wartości true w bool i dlatego nie weryfikuje użytkownika. Dlaczego?
public static bool VerifyPassword(byte[] newPassword, byte[] storedPassword, byte[] storedSalt)
{
byte[] password = CreateHashedPassword(newPassword, storedSalt);
if (!password.Equals(storedPassword))
return false;
return true;
}
Przed tym kodem, chciałbym porównać długość hasła i storedPassword. Jeśli storedPassword jest mniejsze niż hasło, możesz odczytać poza końcem tablicy. Z drugiej strony, jeśli hasło jest krótsze, porównuje tylko kilka pierwszych bajtów. Jeśli możesz uzyskać hasło o mniejszym rozmiarze, możliwe jest dopasowanie z prefiksem zapisanego hasła. Jacob – TheJacobTaylor
Ogólnie rzecz biorąc, algorytmy mieszania haseł zawsze generują wyjście o tej samej liczbie bajtów. Na przykład skrót MD5 ma zawsze 16 bajtów, więc nie ma potrzeby sprawdzania długości skrótów. – Gabe