Quando si memorizzano le password, dovrei usare PHP integrato in crypt
o phpass ?
Se utilizzi crypt
, dovrei usare CRYPT_SHA512
o CRYPT_BLOWFISH
?
Per memorizzare le password, utilizza PHPass
esempio di codice che usa phpass:
require('PasswordHash.php');
$pwdHasher = new PasswordHash(8, FALSE);
// $hash is what you would store in your database
$hash = $pwdHasher->HashPassword( $password );
// $hash would be the $hashed stored in your database for this user
$checked = $pwdHasher->CheckPassword($password, $hash);
if ($checked) {
echo 'password correct';
} else {
echo 'wrong credentials';
}
internamente, PHPass utilizza la funzione crypt()
di PHP, ma tutti i dettagli cattivi sono già stati risolti.
Attualmente, l'utilizzo di CRYPT_BLOWFISH è la migliore pratica. CRYPT_BLOWFISH in PHP è un'implementazione dell'hash di Bcrypt. Bcrypt è basato sul codice a blocchi Blowfish, facendo uso della sua costosa configurazione di chiavi per rallentare l'algoritmo.
Se usi PHPass come nell'esempio sopra e PHP > = 5.3, utilizzerai BCrypt.
La risposta dipende da cosa vuoi raggiungere. Diversi metodi sono per diverse situazioni. C'è un'altra buona libreria chiamata PHP Secure Communications Library che puoi probabilmente usare (leggi Chi dovrebbe usare phpseclib? ).
phpass è limitato dal fatto che stia cercando di essere compatibile con PHP4. Citando dal codice sorgente:
# We're kind of forced to use MD5 here since it's the only
# cryptographic primitive available in all versions of PHP
# currently in use. To implement our own low-level crypto
# in PHP would result in much worse performance and
# consequently in lower iteration counts and hashes that are
# quicker to crack (by non-PHP code).
MD5 è totalmente insicuro. Il tuo codice base supporta PHP4? Altrimenti suggerirei semplicemente di utilizzare la funzione hash () integrata di PHP e passare ad essa 'sha512' o qualcosa del genere.
Leggi altre domande sui tag php