Estoy intentando hacer un hash de la contraseña usando SHA256 con sal aleatoria y clave aleatoria en php y almacenar el valor de hash nuevo con sal y clave utilizada. Quiero saber si esto proporciona seguridad adecuada?
El siguiente es el código:
function hashpwd($string, $salt, $KEY)
{
if(strcmp($KEY, '')==0)
$KEY=openssl_random_pseudo_bytes(32); //key used for encryption and decryption
if(strcmp($salt, '')==0)
{
$salt= openssl_random_pseudo_bytes(32);
}
$string = $salt.$string;
$pwd = hash_hmac("SHA256", $string, $KEY);
//echo "$salt".$pwd."<br>";
return base64_encode($salt).base64_encode($KEY).$pwd;
}
¿Debo usar sal doble?
Nota: el funcionamiento en la PC no está seguro de ofrecer múltiples iteraciones de hash.
EDITAR:
Cambié el código a siguiente, usé password_hash () con BCRYPT y 5000 rondas:
function hashpwd($password)
{
$salt='';
$strong = FALSE;
while (!$strong){
$salt = openssl_random_pseudo_bytes(32,$strong);
}
$pwd = rtrim(password_hash($password, PASSWORD_BCRYPT, array('rounds'=> 5000, 'salt'=> $salt)));
return $pwd;
}
¿Es el código anterior lo suficientemente bueno?
No estoy cuestionando la seguridad de BCRYPT. Mi pregunta fue para saber cuál de los dos códigos era mejor usar.