Edit
Lang
Version 2.4

Práce s hesly – Nette\Security\Passwords

Abychom zajistili bezpečnost našich uživatelů, neukládáme jejich hesla v čitelné podobě, ale uložíme si pouze otisk (tzv. hash). Z otisku nelze zpětně zrekonstruovat původní podobu hesla. Je důležité použít bezpečný algoritmus, kterým otisk vytvoříme. S tím nám pomůže statická třída Nette\Security\Passwords.

Všechny příklady předpokládají vytvořený alias:

use Nette\Security\Passwords;

hash($passwords, array $options = NULL)

Vygeneruje hash hesla pomocí moderního algoritmu bcrypt. Můžeme určit parametr cost z rozsahu 4–31, který udává kolik iterací algoritmu má proběhnout. Pokud parametr neurčíme, bude použita výchozí hodnota 10.

Parametr cost je exponent funkce 2n. Pokud zvolíme hodnotu příliš vysokou, bude výpočet trvat velmi dlouho. Při nejvyšší hodnotě 31 trvá výpočet hesla cca 64 hodin.

$hash = Passwords::hash($password); // Zahashuje heslo
$hash = Passwords::hash($password, ['cost' => 12]); // Zahashuje heslo 12 iteracemi algoritmu bcrypt

verify($password, $hash)

Zjistí, zda dané heslo odpovídá danému otisku.

if (Passwords::verify($password, $hash)) {
    // Provede se, pokud heslo odpovídá otisku
} else {
    // Provede se, pokud heslo neodpovídá otisku
}

needsRehash($password, array $options = NULL)

Zjistí, zda hash odpovídá zadaným volbám. Můžeme nastavit cost z rozsahu 4–31, který udává kolik iterací algoritmu má proběhnout. Pokud parametr neurčíme, bude použita výchozí hodnota 10.

if (Passwords::needsRehash($hash)) {
    // Provede se, pokud je potřeba heslo přehashovat
}