Al almacenar las contraseñas, ¿debo usar PHP co% comp_de% o phpass ?
Si utilizo crypt
, ¿debo usar crypt
o CRYPT_SHA512
?
Para almacenar contraseñas, use PHPass
ejemplo de código usando 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 usa la función crypt()
de PHP, pero todos los detalles desagradables ya se han resuelto.
Actualmente, el uso de CRYPT_BLOWFISH es la mejor práctica. CRYPT_BLOWFISH en PHP es una implementación del hash Bcrypt. Bcrypt se basa en el cifrado de bloque Blowfish, haciendo uso de su configuración de teclas costosa para ralentizar el algoritmo.
Si usa PHPass como en el ejemplo anterior y PHP > = 5.3, usará BCrypt.
La respuesta depende de lo que quieres lograr. Diferentes métodos son para diferentes situaciones. Hay otra buena biblioteca llamada PHP Secure Communications Library que probablemente pueda usar (lea ¿Quién debería usar phpseclib? ).
phpass está limitado por el hecho de que intenta ser compatible con PHP4. Citando el código fuente:
# 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 es totalmente inseguro. ¿Tu base de código va a ser compatible con PHP4? Si no, sugeriría simplemente usar la función hash () incorporada de PHP y pasarla a 'sha512' o algo así.
Lea otras preguntas en las etiquetas php