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