Hashing og salting af kodeord.
Jeg har oprettet to metoder en der hash'er dem med salt og den anden som går hen og sammenligner. Men af en eller anden grund, så vil de ikke sammenligne. Koden er ikke engang mit, tog den fra nettet, hvor mening var, at den skulle virke.Den ene metode ser sådan her ud
public string HashingWithSalt(string kodeord)
{
byte[] salt = new byte[16];
new RNGCryptoServiceProvider().GetBytes(salt);
var pbkdf2 = new Rfc2898DeriveBytes(kodeord, salt, 10000);
byte[] hash = pbkdf2.GetBytes(20);
byte[] hashBytes = new byte[36];
Array.Copy(salt, 0, hashBytes, 0, 16);
Array.Copy(hash, 0, hashBytes, 16, 20);
string savedPasswordHash = Convert.ToBase64String(hashBytes);
return savedPasswordHash;
}
Den anden som sammenligner ser sådan her ud
public bool validatekode(string Kodeord, string dbkodeord)
{
string savedPasswordHash = dbkodeord;
byte[] hashBytes = Convert.FromBase64String(savedPasswordHash);
byte[] salt = new byte[16];
var pbkdf2 = new Rfc2898DeriveBytes(Kodeord, salt, 10000);
byte[] hash = pbkdf2.GetBytes(20);
int ok = 1;
for (int i = 0; i < 20; i++) {
if (hashBytes[i + 16] != hash[i])
{
ok = 0;
}
}
if (ok == 1)
{
return true;
}
else
{
return false;
}
}
Den burde virke. Det her er faktisk min kode. Men kan endda selv sidde og teste disse to metoder.
Der bliver også sendt de korrekte værdier. Det her er eksemplet jeg fandt det fra.
https://medium.com/@mehanix/lets-talk-security-salted-password-hashing-in-c-5460be5c3aae
Er der nogle, som kan få øje på, hvor fejlen sker?