Avatar billede Driton Seniormester
08. februar 2018 - 07:02 Der er 5 kommentarer

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?
Avatar billede erikjacobsen Ekspert
08. februar 2018 - 10:20 #1
Jeg kan ikke se at du putter noget ind i dit salt array under validering??
Avatar billede j3ppah Novice
08. februar 2018 - 10:29 #2
Heller ikke under genereringen.
Dit salt array er tomt.
Avatar billede arne_v Ekspert
08. februar 2018 - 15:01 #3
Salt faar en vaerdi i genereringen via RNGCryptoServiceProvider().GetBytes(salt), men der maa skulle laves en:

Array.Copy(hashBytes, 0, salt, 0, 16);

ved verifikation.
Avatar billede Driton Seniormester
09. februar 2018 - 00:09 #4
Tak arne, nåede ikke at svarer de to andre. Der er værdier i salt'en. Men jeg prøver lige din løsning Arne, men den burde virke, siden hans kode virker.
Avatar billede Driton Seniormester
09. februar 2018 - 00:10 #5
Arne kender du en anden eksempel på nettet, som virker med salting, som har en slow algoritme
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester