sql >> Databasteknik >  >> RDS >> Mysql

Vilken datatyp ska användas för hashat lösenordsfält och vilken längd?

Uppdatering:Att bara använda en hash-funktion är inte tillräckligt stark för att lagra lösenord. Du bör läsa svaret från Gilles i den här tråden för en mer detaljerad förklaring.

För lösenord, använd en nyckelförstärkande hashalgoritm som Bcrypt eller Argon2i. Till exempel, i PHP, använd password_hash()-funktionen , som använder Bcrypt som standard.

$hash = password_hash("rasmuslerdorf", PASSWORD_DEFAULT);

Resultatet är en sträng på 60 tecken som liknar följande (men siffrorna kommer att variera eftersom den genererar ett unikt salt).

$2y$10$.vGA1O9wmRjrwAVXD98HNOgsNpDczlqm3Jq7KnEd1rVAGv3Fykk1a

Använd SQL-datatypen CHAR(60) för att lagra denna kodning av en Bcrypt-hash. Observera att den här funktionen inte kodar som en sträng med hexadecimala siffror, så vi kan inte lika lätt ta bort den för att lagra den i binärt format.

Andra hashfunktioner har fortfarande användningsområden, men inte för att lagra lösenord, så jag behåller det ursprungliga svaret nedan, skrivet 2008.

Det beror på vilken hashalgoritm du använder. Hashing ger alltid ett resultat av samma längd, oavsett input. Det är typiskt att representera det binära hashresultatet i text, som en serie hexadecimala siffror. Eller så kan du använda UNHEX() funktion för att reducera en sträng med hexadecimala siffror med hälften.

  • MD5 genererar ett 128-bitars hashvärde. Du kan använda CHAR(32) eller BINARY(16)
  • SHA-1 genererar ett 160-bitars hashvärde. Du kan använda CHAR(40) eller BINARY(20)
  • SHA-224 genererar ett 224-bitars hashvärde. Du kan använda CHAR(56) eller BINARY(28)
  • SHA-256 genererar ett 256-bitars hashvärde. Du kan använda CHAR(64) eller BINARY(32)
  • SHA-384 genererar ett 384-bitars hashvärde. Du kan använda CHAR(96) eller BINARY(48)
  • SHA-512 genererar ett 512-bitars hashvärde. Du kan använda CHAR(128) eller BINARY(64)
  • BCrypt genererar ett implementeringsberoende 448-bitars hashvärde. Du kan behöva CHAR(56), CHAR(60), CHAR(76), BINARY(56) eller BINARY(60)

Från och med 2015 rekommenderar NIST att använda SHA-256 eller högre för alla tillämpningar av hashfunktioner som kräver interoperabilitet. Men NIST rekommenderar inte att du använder dessa enkla hash-funktioner för att lagra lösenord på ett säkert sätt.

Mindre hashalgoritmer har sina användningsområden (som internt i en applikation, inte för utbyte), men de är känd för att vara knäckbar .



  1. Stöder PostgreSQL transparent komprimering av tabeller (fragment)?

  2. framåt cross edition triggers i R12.2

  3. Vad händer om du inte begår en transaktion till en databas (säg SQL Server)?

  4. Rekursiv fråga i SQL Server