Questo snippet di codice è sufficiente per l'hash della password e il sale

11

Dopo alcuni giorni a leggere le password di salatura e hashing, ho trovato un vero bit di codice che indica come farlo. Questo è quello che ho trovato:

$blowfish_salt = bin2hex(openssl_random_pseudo_bytes(22));  
$hash = crypt($data, "$2a$12$".$blowfish_salt);  

È un buon modo per farlo?

    
posta vinaya 24.07.2013 - 12:26
fonte

3 risposte

14
  1. È più facile utilizzare la funzione password_hash di php 5.5, o se lo sei utilizzando una versione precedente, la libreria di compatibilità
  2. openssl_random_pseudo_bytes a volte soffre di problemi di prestazioni. Considera invece mcrypt_create_iv (size, MCRYPT_DEV_URANDOM) .
  3. la codifica del sale è complicata. Hex non utilizza lo spazio in modo ottimale e Base64 utilizza caratteri non validi.

    $salt = substr(strtr(base64_encode($randomSalt), '+', '.'), 0, 22);
    

    dovrebbe fare il trucco.

Combinando questi ottieni

$binarySalt = mcrypt_create_iv(16, MCRYPT_DEV_URANDOM);
$salt = substr(strtr(base64_encode($binarySalt), '+', '.'), 0, 22);

Controlla Seven Ways To Screw Up BCrypt sul blog di ircmaxell per ulteriori letture.

    
risposta data 24.07.2013 - 14:02
fonte
2

Non c'è niente di sbagliato nel tuo codice. Tuttavia, preferisco sempre utilizzare librerie già pronte per l'hashing della password quando possibile. Per PHP, è disponibile un'eccellente implementazione all'indirizzo PHPass .

require('PasswordHash.php');

$pwdHasher = new PasswordHash(8, FALSE);

$hash = $pwdHasher->HashPassword( $password );

La verifica è fatta anche per te.

$checked = $pwdHasher->CheckPassword($password, $hash);
if ($checked) {
    echo 'password correct';
} else {
    echo 'wrong credentials';
}
    
risposta data 24.07.2013 - 13:57
fonte
0

Lo stai facendo correttamente. Il sale che stai generando è considerato casuale e abbastanza lungo (nota che un sale deve essere univoco per password). Stai anche utilizzando bcrypt che è considerato un algoritmo di hashing della password sicuro.

    
risposta data 24.07.2013 - 12:38
fonte

Leggi altre domande sui tag