Opdatering:Blot at bruge en hash-funktion er ikke stærk nok til at gemme adgangskoder. Du bør læse svaret fra Gilles i denne tråd for en mere detaljeret forklaring.
Til adgangskoder skal du bruge en nøgleforstærkende hash-algoritme som Bcrypt eller Argon2i. I PHP skal du f.eks. bruge password_hash()-funktionen , som bruger Bcrypt som standard.
$hash = password_hash("rasmuslerdorf", PASSWORD_DEFAULT);
Resultatet er en streng på 60 tegn, der ligner følgende (men cifrene vil variere, fordi den genererer et unikt salt).
$2y$10$.vGA1O9wmRjrwAVXD98HNOgsNpDczlqm3Jq7KnEd1rVAGv3Fykk1a
Brug SQL-datatypen CHAR(60)
for at gemme denne kodning af en Bcrypt-hash. Bemærk, at denne funktion ikke koder som en streng af hexadecimale cifre, så vi kan ikke så nemt fjerne den til at gemme den i binært format.
Andre hash-funktioner kan stadig bruges, men ikke til lagring af adgangskoder, så jeg beholder det originale svar nedenfor, skrevet i 2008.
Det afhænger af den hashing-algoritme, du bruger. Hashing giver altid et resultat af samme længde, uanset input. Det er typisk at repræsentere det binære hash-resultat i tekst som en række hexadecimale cifre. Eller du kan bruge UNHEX()
funktion til at reducere en streng af hex-cifre til det halve.
- MD5 genererer en 128-bit hashværdi. Du kan bruge CHAR(32) eller BINARY(16)
- SHA-1 genererer en 160-bit hashværdi. Du kan bruge CHAR(40) eller BINARY(20)
- SHA-224 genererer en 224-bit hashværdi. Du kan bruge CHAR(56) eller BINARY(28)
- SHA-256 genererer en 256-bit hashværdi. Du kan bruge CHAR(64) eller BINARY(32)
- SHA-384 genererer en 384-bit hashværdi. Du kan bruge CHAR(96) eller BINARY(48)
- SHA-512 genererer en 512-bit hashværdi. Du kan bruge CHAR(128) eller BINARY(64)
- BCrypt genererer en implementeringsafhængig 448-bit hashværdi. Du kan have brug for CHAR(56), CHAR(60), CHAR(76), BINARY(56) eller BINARY(60)
Fra 2015 anbefaler NIST brug af SHA-256 eller højere for enhver applikation af hash-funktioner, der kræver interoperabilitet. Men NIST anbefaler ikke at bruge disse simple hash-funktioner til sikker opbevaring af adgangskoder.
Mindre hashing-algoritmer har deres anvendelser (som internt i en applikation, ikke til udveksling), men de er kendt for at være knækkelig .