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

Quale tipo di dati utilizzare per il campo della password con hash e quale lunghezza?

Aggiornamento:il semplice utilizzo di una funzione hash non è abbastanza potente per memorizzare le password. Dovresti leggere la risposta di Gilles su questo thread per una spiegazione più dettagliata.

Per le password, usa un algoritmo hash per il rafforzamento delle chiavi come Bcrypt o Argon2i. Ad esempio, in PHP, utilizzare la funzione password_hash() , che utilizza Bcrypt per impostazione predefinita.

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

Il risultato è una stringa di 60 caratteri simile alla seguente (ma le cifre varieranno, perché genera un salt univoco).

$2y$10$.vGA1O9wmRjrwAVXD98HNOgsNpDczlqm3Jq7KnEd1rVAGv3Fykk1a

Usa il tipo di dati SQL CHAR(60) per memorizzare questa codifica di un hash Bcrypt. Nota che questa funzione non codifica come una stringa di cifre esadecimali, quindi non possiamo annullarla facilmente per memorizzarla in binario.

Altre funzioni hash hanno ancora usi, ma non per la memorizzazione di password, quindi manterrò la risposta originale di seguito, scritta nel 2008.

Dipende dall'algoritmo di hashing che usi. L'hashing produce sempre un risultato della stessa lunghezza, indipendentemente dall'input. È tipico rappresentare il risultato hash binario nel testo, come una serie di cifre esadecimali. Oppure puoi utilizzare UNHEX() funzione per ridurre della metà una stringa di cifre esadecimali.

  • MD5 genera un valore hash a 128 bit. Puoi utilizzare CHAR(32) o BINARY(16)
  • SHA-1 genera un valore hash a 160 bit. Puoi utilizzare CHAR(40) o BINARY(20)
  • SHA-224 genera un valore hash a 224 bit. Puoi utilizzare CHAR(56) o BINARY(28)
  • SHA-256 genera un valore hash a 256 bit. Puoi utilizzare CHAR(64) o BINARY(32)
  • SHA-384 genera un valore hash a 384 bit. Puoi utilizzare CHAR(96) o BINARY(48)
  • SHA-512 genera un valore hash a 512 bit. Puoi utilizzare CHAR(128) o BINARY(64)
  • BCrypt genera un valore hash a 448 bit dipendente dall'implementazione. Tu potrebbe essere necessario CHAR(56), CHAR(60), CHAR(76), BINARY(56) o BINARY(60)

A partire dal 2015, il NIST consiglia di utilizzare SHA-256 o superiore per tutte le applicazioni di funzioni hash che richiedono l'interoperabilità. Ma il NIST sconsiglia di utilizzare queste semplici funzioni hash per archiviare le password in modo sicuro.

Gli algoritmi di hashing minori hanno i loro usi (come interni a un'applicazione, non per lo scambio), ma sono noto per essere crackabile .