Paroolid ei lenda tuksi. See ongi soolamise mõte, et samast paroolist erineval hetkel hashi tehes tuleks see ikkagi erinev. Kindlasti leiab veebist andmebaase, mis sisaldavad väljaarvutatud md5 hashe ja millest nad genereeritud on. Kuna kaks erinevat parooli võivad anda sama hashi, siis saab isegi mitme parooliga sisse logida. Kui aga hashid on soolatud, siis sellise paroolide/hashide andmebaasi kasutamisel pole mõtet.
password_hash-i räsi peidab endas ka soola ning verify oskab selle välja lugeda, ning kombinatsioonis kasutaja sisestatud parooliga proovib, kas räsi tuleb õige.
Toon näite md5 baasil.
$sool = rand(1000,9999);
$hash_soolaga = md5('paRool'.$sool).$sool;
$hash_soolaga paned baasi.
//kontroll
$hash = substr($row['hash_soolaga'], 0, -4);//row tuleb baasist, eemaldame soola
$sool = substr($row['hash_soolaga'], -4); //võtame ainult soola
if (md5('paRool'.$sool) === $row['hash_soolaga'])
{
korras
}
Minumeelest see ei toimi, kui $sool on random ja paned:
$hash_soolaga = md5('paRool'.$sool);
, siis tuleb selline hash mida enam ise ka lahti ei hammusta
(random numbrit ju ei tea).
Hiljem ei saa ju enam teha võrdlust
if (md5('paRool'.$sool) === $row['hash_soolaga']) kuna soola väärtus on midagi muud kui parooli hashi salvestamise hetkel.
Või sa pead silmas, et soola salvestad eraldi iga kasutaja juurde baasi?