PHP - password_hash
Třída
Metoda - password_hash
(PHP 5 >= 5.5.0, PHP 7)
Funkce password_hash() slouží k bezpečnému vytváření
hashů hesel.
Kromě výsledného hashe je v navrácené hodnotě uložena také informace o použitém algoritmu. To umožňuje v případě přechodu na bezpečnější algoritmus ověřovat hesla zahashovaná pomocí algoritmu původního.
Hashe lze ověřovat pomocí funkce password_verify().
Na rozdíl od funkce crypt(), password_hash()
automaticky generuje náhodný salt a podporuje pouze algoritmy bezpečné pro
ukládání hesel. Formát výsledného hashe je však stejný a hash
vytvořený pomocí crypt() lze ověřit pomocí
password_verify().
Algoritmy
V současnosti jsou podporovány algoritmy BCRYPT a od PHP 7 i ARGON2.
Kromě nich je možné použít konstantu PASSWORD_DEFAULT,
která zajistí použití algoritmu, který je považován za bezpečný.
Konkrétní algoritmus se s novými verzemi PHP může v závislosti na
zvyšujících se požadavcích na bezpečnost a složitost algoritmů měnit.
Při jejím použití je tak třeba počítat s variabilní délkou výstupu,
která by neměla být kratší než 60 znaků (doporučuje se 255). Pokud si
nejste jisti správným algoritmem, doporučuje se používat právě
PASSWORD_DEFAULT.
Od PHP 5.5.0 je jako PASSWORD_DEFAULT používán bcrypt.
Procedurální
- function password_hash (string $password, integer $algo, array $options) : string
Parametry
| Název | Datový typ | Výchozí hodnota | Popis |
|---|---|---|---|
| $password | string | Heslo k zahashování. | |
| $algo | integer | Konstanta specifikující algoritmus použitý k zahashování hesla. | |
| $options | array | Asociativní pole dodatečných nastavení použitého algoritmu, jako je například volba soli a podobně. Závislé na zvoleném algoritmu. Možnosti pro
|
Návratové hodnoty
Vrací: string
V případě úspěchu vrací hash hesla (string), jinak
false.
Příklady
Vytvoření hashe pomocí výchozího algoritmu:
<?php
$hash = password_hash("tabule", PASSWORD_DEFAULT);
if (password_verify("tabule", $hash)) {
echo "Hash pro heslo 'tabule' ($hash) úspěšně vytvořen a ověřen.";
} else {
echo "Ajaj, něco se pokazilo...";
}
Vytvoření hashe pomocí Argon2:
<?php
$hash = password_hash("tabule", PASSWORD_ARGON2I);
echo "Hash: $hash \n";
echo "A ověření proběhlo ";
echo password_verify("tabule", $hash) ? "ÚSPĚŠNĚ!" : "NEÚSPĚŠNĚ :(";
Související manuály
- function crypt (string $str, string $salt) : string
- function password_verify (string $password, string $hash) : boolean
