Funzione PHP crypt()
❮ Riferimento alla stringa PHP
Definizione e utilizzo
La funzione crypt() restituisce una stringa hash utilizzando algoritmi DES, Blowfish o MD5.
Questa funzione si comporta in modo diverso su diversi sistemi operativi. PHP controlla quali algoritmi sono disponibili e quali algoritmi utilizzare quando viene installato.
Il parametro sale è facoltativo. Tuttavia, crypt() crea una password debole senza il sale. Assicurati di specificare un sale sufficientemente forte per una maggiore sicurezza.
Ci sono alcune costanti che vengono utilizzate insieme alla funzione crypt(). Il valore di queste costanti viene impostato da PHP al momento dell'installazione.
Costanti:
- [CRYPT_STD_DES] - Hash standard basato su DES con salt a due caratteri dell'alfabeto "./0-9A-Za-z". L'utilizzo di caratteri non validi nel salt causerà il fallimento di questa funzione.
- [CRYPT_EXT_DES] - Hash esteso basato su DES con un salt di nove caratteri costituito da un trattino basso seguito da 4 byte di conteggio delle iterazioni e 4 byte di salt. Questi sono codificati come caratteri stampabili, 6 bit per carattere, primo il carattere meno significativo. I valori da 0 a 63 sono codificati come "./0-9A-Za-z". L'utilizzo di caratteri non validi nel salt causerà il fallimento della funzione.
- [CRYPT_MD5] - Hashing MD5 con un salt di 12 caratteri che inizia con $ 1 $
- [CRYPT_BLOWFISH] - Hashing Blowfish con un sale che inizia con $2a$, $2x$ o $2y$, un parametro di costo a due cifre "$" e 22 caratteri dell'alfabeto "./0-9A-Za-z" . L'utilizzo di caratteri al di fuori dell'alfabeto farà sì che questa funzione restituisca una stringa di lunghezza zero. Il parametro "$" è il logaritmo in base 2 del conteggio delle iterazioni per l'algoritmo di hashing di Blowfish sottostante e deve essere compreso nell'intervallo 04-31. I valori al di fuori di questo intervallo causeranno il fallimento della funzione.
- [CRYPT_SHA_256] - Hash SHA-256 con un salt di 16 caratteri che inizia con $ 5 $. Se la stringa salt inizia con "rounds=<N>$", il valore numerico di N viene utilizzato per indicare quante volte il ciclo di hashing deve essere eseguito, proprio come il parametro cost su Blowfish. Il numero predefinito di round è 5000, c'è un minimo di 1000 e un massimo di 999.999.999. Qualsiasi selezione di N al di fuori di questo intervallo verrà troncata al limite più vicino.
- [CRYPT_SHA_512] - Hash SHA-512 con un salt di 16 caratteri che inizia con $ 6 $. Se la stringa salt inizia con "rounds=<N>$", il valore numerico di N viene utilizzato per indicare quante volte il ciclo di hashing deve essere eseguito, proprio come il parametro cost su Blowfish. Il numero predefinito di round è 5000, c'è un minimo di 1000 e un massimo di 999.999.999. Qualsiasi selezione di N al di fuori di questo intervallo verrà troncata al limite più vicino.
Sui sistemi in cui questa funzione supporta più algoritmi, le costanti sopra sono impostate su "1" se supportata e "0" in caso contrario.
Nota: non esiste una funzione di decrittazione. La funzione crypt() utilizza un algoritmo unidirezionale.
Sintassi
crypt(str,salt)
Valori dei parametri
Parameter | Description |
---|---|
str | Required. Specifies the string to be hashed |
salt | Optional. A salt string to base the hashing on |
Dettagli tecnici
Valore di ritorno: | Restituisce la stringa codificata o una stringa più corta di 13 caratteri ed è garantito che differisca dal salt in caso di errore |
---|---|
Versione PHP: | 4+ |
Registro delle modifiche: | PHP 5.6.0 - Mostra un avviso di sicurezza E_NOTICE se salt viene omesso. PHP 5.3.7 - Aggiunte le modalità Blowfish $2x$ e $2y$. PHP 5.3.2 - Aggiunti SHA-256 e SHA-512. Risolto il problema con il comportamento di Blowfish sui round non validi che restituisce la stringa "fallito" ("*0" o "*1"), invece di tornare a DES. PHP 5.3.0 - PHP ora contiene la propria implementazione per MD5 crypt, Standard DES, Extended DES e gli algoritmi Blowfish e la utilizzerà se il sistema non supporta uno o più algoritmi. |
Altri esempi
Esempio
In questo esempio testeremo i diversi algoritmi:
<?php
// 2 character salt
if (CRYPT_STD_DES == 1)
{
echo "Standard DES: ".crypt('something','st')."\n<br>";
}
else
{
echo "Standard DES not supported.\n<br>";
}
// 4 character salt
if (CRYPT_EXT_DES == 1)
{
echo "Extended DES: ".crypt('something','_S4..some')."\n<br>";
}
else
{
echo "Extended DES not supported.\n<br>";
}
// 12 character salt starting with $1$
if (CRYPT_MD5 == 1)
{
echo "MD5: ".crypt('something','$1$somethin$')."\n<br>";
}
else
{
echo "MD5 not supported.\n<br>";
}
// Salt starting with $2a$. The two digit cost parameter: 09. 22 characters
if (CRYPT_BLOWFISH == 1)
{
echo "Blowfish: ".crypt('something','$2a$09$anexamplestringforsalt$')."\n<br>";
}
else
{
echo "Blowfish DES not supported.\n<br>";
}
// 16 character salt starting with $5$. The default number of rounds is 5000.
if (CRYPT_SHA256 == 1)
{
echo "SHA-256: ".crypt('something','$5$rounds=5000$anexamplestringforsalt$')."\n<br>"; }
else
{
echo "SHA-256 not supported.\n<br>";
}
// 16 character salt starting with $6$. The default number of rounds is 5000.
if (CRYPT_SHA512 == 1)
{
echo "SHA-512: ".crypt('something','$6$rounds=5000$anexamplestringforsalt$');
}
else
{
echo "SHA-512 not supported.";
}
?>
L'output del codice sopra potrebbe essere (a seconda del sistema operativo):
Standard DES: stqAdD7zlbByI
Extended DES: _S4..someQXidlBpTUu6
MD5: $1$somethin$4NZKrUlY6r7K7.rdEOZ0w.
Blowfish: $2a$09$anexamplestringforsaleLouKejcjRlExmf1671qw3Khl49R3dfu
SHA-256: $5$rounds=5000$anexamplestringf$KIrctqsxo2wrPg5Ag/hs4jTi4PmoNKQUGWFXlVy9vu9
SHA-512: $6$rounds=5000$anexamplestringf$Oo0skOAdUFXkQxJpwzO05wgRHG0dhuaPBaOU/
oNbGpCEKlf/7oVM5wn6AN0w2vwUgA0O24oLzGQpp1XKI6LLQ0.
❮ Riferimento alla stringa PHP