NOVINKA: Získej 40 hodin praktických dovedností s AI – ZDARMA ke každému akreditovanému kurzu!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

PHP - password_hash

Třída

Kořen \ Bez třídy

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ázevDatový typVýchozí hodnotaPopis
$passwordstring

Heslo k zahashování.

$algointeger

Konstanta specifikující algoritmus použitý k zahashování hesla.

$optionsarray

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 PASSWORD_BCRYPT

  • cost (int): "náročnost" algoritmu. Čím vyšší, tím bezpečnější, ale náročnější na výpočetní prostředky. Výchozí hodnota je 10.
  • salt (string): Ruční nastavení saltu. Je-li vynecháno, je salt vygenerován náhodně.

Možnosti pro PASSWORD_ARGON2I

  • memory_cost (int): Maximální paměť v bajtech, kterou lze použít během výpočtu. Výchozí hodnota PASSWORD_ARGON2_DEFAULT_MEMORY_COST.
  • time_cost (int): Maximální čas výpočtu v milisekundách. Výchozí hodnota PASSWORD_ARGON2_DEFAULT_TIME_COST.
  • threads (int): Maximální počet vláken použitých při výpočtu. Výchozí hodnota PASSWORD_ARGON2_DEFAULT_THREADS.

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
      Aktivity