Sto provando ad hash la password usando SHA256 con la chiave casuale salt e random in php e memorizzando il valore hash indietro con salt e la chiave usata. Voglio sapere se questo fornisce una sicurezza adeguata?
Quanto segue è il codice:
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;
}
Devo usare il doppio sale?
Nota: l'esecuzione su PC non è sicura di offrire più iterazioni di hashing.
EDIT:
Ho cambiato il codice in seguito, usato password_hash () con BCRYPT e 5000 round:
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;
}
Il codice sopra è abbastanza buono?
Non sto mettendo in dubbio la sicurezza di BCRYPT, la mia domanda era sapere quale dei due codici era meglio usare.