PHP - crypt
Třída
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čí hodnotu0
, az
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ímrounds=<N>$
za prefix. Výchozí hodnotaN
je 5000, povolený rozsah je 1000 ~ 999 999 999.CRYPT_SHA512
- Algoritmus SHA512, prefix$6$
. Nastavení obdobné jako uCRYPT_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ázev | Datový typ | Výchozí hodnota | Popis |
---|---|---|---|
$str | string | String, ke kterému bude vytvořen hash. Je-li použit algoritmus
| |
$salt | string | 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