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 - crypt

Třída

Kořen \ Bez třídy

Metoda - crypt

(PHP 4, PHP 5, PHP 7)

crypt() slouží k vytváření hashů zadaného stringu pomocí jednoho z podporovaných jednosměrných algoritmů. Hashovací algoritmus lze zvolit pomocí speciálního prefixu saltu, není-li salt specifikován, použije se standardní unixový algoritmus na bázi DES, či MD5 (v závislosti na podpoře na daném systému) s náhodným saltem.

Použití crypt() bez saltu v PHP verze 5.6 a vyšší způsobí vyvolání chyby typu E_NOTICE.

Poznámka: Pokud hledáte funkci vhodnou pro hashování a ověřování hesel, použijte raději specializované funkce password_hash() a password_verify().

Hashe vytvořené pomocí funkce crypt() jsou kompatibilní s hashi vytvořenými funkcí password_hash(), a lze je tak ověřovat i pomocí password_verify().

Podporované algoritmy

Od verze 5.3.0 jsou podporovány následující algoritmy:

  • CRYPT_STD_DES - Standardní algoritmus založený na DES. Jako salt jsou použity dva znaky z abecedy "./0-9A-Za-z". Příklad saltu: /U.
  • CRYPT_EXT_DES - Rozšířený algoritmus založený na DES. Jeho salt začíná znakem _, následovaný dvěma 26-bitovými čísly zakódovanými do dvou čtveřic tisknutelných znaků z rozsahu "./0-9A-Za-z" (kde . značí hodnotu 0, a z hodnotu 63, každý znak tak nese 6 bitů. Řazení je od nejméně významného znaku po nejvíce významný.). První čtveřice určuje počet iterací, a druhá je samotným saltem. Příklad saltu: _C1..1R9/.
  • CRYPT_MD5 - Standardní MD5. Salt začíná $1$, následovaný až dvanácti znaky a dolarem. Příklad saltu: $1$ITnetwork.CZ$.
  • CRYPT_BLOWFISH - Algoritmus blowfish. Od PHP 5.3.7 prefix $2y$, z důvodu zpětné kompatibility je možno použít i prefixy měnící chování algoritmu $2x$ a $2a$, které však znamenají určité bezpečnostní riziko. Prefix je následován dvěma číslicemi určující tzv. cost v rozmezí "04-32" a 22 znaky z rozsahu "./0-9A-Za-z" (delší stringy jsou zkráceny, kratší nejsou povoleny). Příklad saltu: $2y$08$AtzuKL95PU1.WBnm/8920y$
  • CRYPT_SHA256 - Algoritmus SHA256. Prefix $5$ následovaný 16 znaky a dolarem. Počet průběhů hashovací funkce lze upravit přidáním rounds=<N>$ za prefix. Výchozí hodnota N je 5000, povolený rozsah je 1000 ~ 999 999 999.
  • CRYPT_SHA512 - Algoritmus SHA512, prefix $6$. Nastavení obdobné jako u CRYPT_SHA512.

Ve verzích předcházejících 5.3.0 záleží na podpoře daného algoritmu systémem. Podporu lze ověřit pomocí globální konstanty nesoucí název algoritmu, například podporu SHA256 lze ověřit pomocí CRYPT_SHA256. Je-li funkce podporována, hodnota proměnné je 1, jinak 0.

Procedurální

  • function crypt (string $str, string $salt) : string

Parametry

NázevDatový typVýchozí hodnotaPopis
$strstring

String, ke kterému bude vytvořen hash. Je-li použit algoritmus CRYPT_BLOWFISH, bude zkrácen na délku 72 znaků.

$saltstring

Salt, který bude při hashování použit. Jeho formátem lze určit algoritmus, který bude použit.

Návratové hodnoty

Vrací: string

Vrací hash vstupního stringu. V případě neúspěchu nebo špatného formátu hashe vrací string kratší než 13 (21 v případě Blowfish) znaků.

Příklady

<?php
// Pro vytváření bezpečných hashů vždy generujte náhodný salt pro každý jednotlivý hash
$salt = '$2y$08$' . str_replace('+', '.', base64_encode(mcrypt_create_iv(16, MCRYPT_DEV_URANDOM))) . '$';
echo "Blowfish hash: " . crypt("itnetwork", $salt);
?>

Související manuály

      • function password_hash (string $password, integer $algo, array $options) : string
      Aktivity