sql >> Database teknologi >  >> RDS >> Mysql

Hvilken datatype skal bruges til hashed kodeordsfelt og hvilken længde?

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 .



  1. Hvad er grunden / nytten er at bruge ENABLE nøgleord i oracle database statements

  2. JSON_QUERY() vs JSON_VALUE() i SQL Server:Hvad er forskellen?

  3. Forbindelse af applikationer, der kører på Linux, til Amazon Relational Database Services (RDS) til SQL Server

  4. Brugerdefineret BESTILLING EFTER Forklaring