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, azhodnotu 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í hodnotaNje 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
