Den sædvanlige måde at gemme adgangskode på er at bruge en hash-funktion på adgangskoden, men at salte det på forhånd. Det er vigtigt at "salte" adgangskoden for at forsvare sig mod regnbuebord angreb.
Så dit bord skulle se nogenlunde sådan ud
._______._________________.______________.
|user_id|hash |salt |
|-------|-----------------|--------------|
|12 |[email protected]|13%!#tQ!#3t...|
| |... |... |
Når du tjekker om en given adgangskode matcher en bruger, bør du sammenkæde saltet til den givne adgangskode og beregne hash-funktionen for resultatstrengen. Hvis hash-funktionens output matcher hash
kolonne - det er den korrekte adgangskode.
Det er dog vigtigt at forstå, at salt-hash-idéen har en specifik grund - for at forhindre nogen med adgang til databasen i at kende nogens adgangskode (det anses for at være et vanskeligt problem at vende en hash-funktions output). Så f.eks. vil bankens DBA ikke være i stand til at logge ind på din bankkonto, selvom han har adgang til alle kolonner.
Du bør også overveje at bruge det, hvis du tror, at dine brugere vil bruge en følsom adgangskode (f.eks. deres adgangskode til deres gmail-konto) som adgangskode til dit websted.
IMHO det er ikke altid en sikkerhedsfunktion, der er nødvendig. Så du bør overveje, om du vil have det eller ej.
Se denne artikel for en god oversigt over denne mekanisme.
Opdatering: Det er værd at nævne, at for ekstra sikkerhed mod målrettet angreb for at vende individuel adgangskodes hash, bør du brug bcrypt , hvilket kan være vilkårligt svært at beregne. (Men medmindre du virkelig er bange for, at en mystisk mand i sort målretter mod din specifikke database, synes jeg sha1 er god nok. Jeg ville ikke introducere en anden afhængighed for mit projekt for denne ekstra sikkerhed. Når det er sagt, er der ingen grund til ikke at bruge sha1 100 gange, hvilket ville give en lignende effekt).