Tak jsem po těchto pokynů o tom, jak hash hesla. https://docs.microsoft.com/en-us/aspnet/core/security/data-protection/consumer-apis/password-hashing
Byl jsem schopen hash hesla se solí I uložené sůl v databázi a jsem vyhledával sůl z databáze v pohodě. Kde jsem dostat zakopl je; pokud tomu rozumím správně, pokud hash hesla bez soli by to vyjít totéž, pokud používáte stejný sůl (z databáze) s hash je třeba ověřit, a to vyjde s jiným hash hesla.
Otázka: Proč není možné při použití soli uložené v databázi mám stejné heslo?
Kód: Kód se snaží ověřit heslo pomocí soli uložené v databázi. Ale mám dvě různá hesla.
string password = txtSignPass.Text;
string email = txtSignEmail.Text;
SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings[db].ToString());
SqlCommand cmd = new SqlCommand(SELECT * FROM users WHERE email = @email;, conn);
cmd.Parameters.AddWithValue(@email, email);
conn.Open();
SqlDataReader dr = cmd.ExecuteReader();
while (dr.Read())
{
byte[] salt = Encoding.UTF8.GetBytes(dr[salt].ToString());
string hashed = Convert.ToBase64String(KeyDerivation.Pbkdf2(
password: password,
salt: salt,
prf: KeyDerivationPrf.HMACSHA1,
iterationCount: 10000,
numBytesRequested: 256 / 8));