Haga un seguimiento de esta pregunta: hash PHP fuerte sin sal .
Sin entrar en los detalles, usar bcrypt sin sal / pimienta es un poco complejo para mi caso, así que me quedo en una implementación de "bucle simple".
En la "versión 1" a continuación, simplemente pincho el sha512 repetidamente, mientras que en la "versión 2" incluyo los datos de entrada en cada iteración:
$data = $websiteDomain . $myChildSchool . $myPetName . $etc;
// version 1
$result = $data;
for ($i = 0; $i < 1000000; ++$i) {
$result = hash('sha512', $result, true);
}
// version 2
$result = '';
for ($i = 0; $i < 1000000; ++$i) {
$result = hash('sha512', $data . $result, true);
}
$result = str_replace(['/', '+', '='], '', base64_encode($result));
$result = substr($result, 0, $passwordLength);
¿Es más segura la "versión 2"?
Estoy pensando en cosas como la paralelización para la "versión 1", donde el primer hash se computaría normalmente, luego los 999,999 hashes restantes de cada candidato se computarían usando un procesamiento en paralelo.