Funzione crypt() di PHP
Definizione e utilizzo
La funzione crypt() restituisce una stringa crittografata utilizzando l'algoritmo DES, Blowfish o MD5.
Il comportamento della funzione su diversi sistemi operativi è diverso, alcuni sistemi operativi supportano un tipo di algoritmo superiore. Durante l'installazione, PHP verifica quali algoritmi sono disponibili e quali vengono utilizzati.
L'algoritmo specifico dipende dal formato e dalla lunghezza del parametro sale. Aggiungendo il numero di stringhe generate da un metodo di crittografia specifico, il sale può rendere l'加密 più sicuro.
Ecco alcune costanti utilizzate insieme alla funzione crypt(). Queste costanti di valore sono impostate da PHP durante l'installazione.
Costanti:
[CRYPT_SALT_LENGTH] | Lunghezza di crittografia predefinita. Utilizza la crittografia DES standard, lunghezza di 2 byte |
[CRYPT_STD_DES] | L'algoritmo di hash basato su DES standard utilizza due caratteri dal set "./0-9A-Za-z" come sale. L'uso di caratteri illegali nel sale comporta il fallimento di crypt(). |
[CRYPT_EXT_DES] | Estensione dell'algoritmo di hash basato su DES. Il sale è una stringa di 9 caratteri, formata da 1 sottolineato seguita da 4 byte di numero di iterazioni e 4 byte di sale. Questi vengono codificati in caratteri stampabili, ciascuno di 6 bit, con i bit validi minori prioritari. Da 0 a 63 vengono codificati come "./0-9A-Za-z". L'uso di caratteri illegali nel sale comporta il fallimento di crypt(). |
[CRYPT_MD5] | L'hashing MD5 utilizza una stringa di sale di 12 caratteri che inizia con $1$. |
[CRYPT_BLOWFISH] | L'algoritmo Blowfish utilizza la seguente stringa di sale: "$2a$", un parametro cost a due cifre, "$" e una stringa di 64 bit composta da caratteri combinati da "./0-9A-Za-z". L'uso di caratteri al di fuori di questo intervallo nella stringa di sale causerà che crypt() restituisca una stringa vuota. Il parametro cost a due cifre è il logaritmo in base 2 del numero di iterazioni, il cui intervallo è 04-31. Un valore al di fuori di questo intervallo causerà il fallimento di crypt(). |
CRYPT_SHA256 | L'algoritmo SHA-256 utilizza una stringa di sale di 16 caratteri che inizia con $5$ per l'hashing. Se la stringa di sale inizia con "rounds=<N>$", il valore numerico di N viene utilizzato per specificare il numero di iterazioni di hashing, il che è simile al parametro cost dell'algoritmo Blowfish. Il numero di iterazioni predefinito è 5000, il minimo è 1000, e il massimo è 999,999,999. Il valore di N al di fuori di questo intervallo verrà convertito nel valore più vicino. |
CRYPT_SHA512 | L'algoritmo SHA-512 utilizza una stringa di sale di 16 caratteri che inizia con $6$ per l'hashing. Se la stringa di sale inizia con "rounds=<N>$", il valore numerico di N viene utilizzato per specificare il numero di iterazioni di hashing, il che è simile al parametro cost dell'algoritmo Blowfish. Il numero di iterazioni predefinito è 5000, il minimo è 1000, e il massimo è 999,999,999. Il valore di N al di fuori di questo intervallo verrà convertito nel valore più vicino. |
Sul sistema che supporta più algoritmi, se supportano i costanti sopra menzionate, impostare a "1", altrimenti impostare a "0".
Note:Non esiste una funzione di decodifica corrispondente. La funzione crypt() utilizza un algoritmo a senso unico.
Sintassi
crypt(str,salt)
Parametro | Descrizione |
---|---|
str | Obbligatorio. Specifica la stringa da codificare. |
salt | Opzionale. Stringa utilizzata per aumentare il numero di caratteri codificati per rendere la codifica più sicura. Se non viene fornito il parametro salt, PHP ne genererà uno casuale ogni volta che viene chiamata la funzione. |
Dettagli tecnici
Valore di ritorno: | Restituisce una stringa criptata o una stringa con meno di 13 caratteri, in modo da distinguerla dalla chiave di sale in caso di fallimento. |
Versione PHP: | 4+ |
Log delle modifiche
Versione | Descrizione |
---|---|
5.3.2 | Basato sull'implementazione di Ulrich Drepper, aggiunto crypt basato sugli algoritmi SHA-256 e SHA-512. |
5.3.2 | Corretto il problema dell'algoritmo Blowfish causato da cicli illegali, restituisce la stringa "fallimento" ("*0" o "*1") invece di passare all'algoritmo DES. |
5.3.0 | PHP include la propria implementazione di MD5 Crypt, inclusi gli algoritmi DES standard, DES esteso e Blowfish. Se il sistema manca di una implementazione, PHP utilizzerà la propria. |
Esempio
Esempio 1
In questo esempio, testeremo diversi algoritmi:
<?php // Salt di due caratteri if (CRYPT_STD_DES == 1) { echo "DES standard: ".crypt('something','st')."\n<br>"; } else { echo "DES standard non supportato.\n<br>"; } // Salt di 4 caratteri if (CRYPT_EXT_DES == 1) { echo "DES esteso: ".crypt('something','_S4..some')."\n<br>"; } else { echo "DES esteso non supportato.\n<br>"; } // Con inizio $1$ 12 caratteri if (CRYPT_MD5 == 1) { echo "MD5: ".crypt('something','$1$somethin$')."\n<br>"; } else { echo "MD5 non supportato.\n<br>"; } // Con inizio $2a$ il Salt. Parametro di costo a due cifre: 09. 22 caratteri if (CRYPT_BLOWFISH == 1) { echo "Blowfish: ".crypt('something','$2a$09$anexamplestringforsalt$')."\n<br>"; } else { echo "Blowfish DES non supportato.\n<br>"; } // Il sale con inizio $5$ è di 16 caratteri. Il numero predefinito è 5000. if (CRYPT_SHA256 == 1) { echo "SHA-256: ".crypt('something','$5$rounds=5000$anexamplestringforsalt$')."\n<br>"; else { echo "SHA-256 non supportato.\n<br>"; } // Il sale con inizio $5$ è di 16 caratteri. Il numero predefinito è 5000. if (CRYPT_SHA512 == 1) { echo "SHA-512: ".crypt('something','$6$rounds=5000$anexamplestringforsalt$'); } else { echo "SHA-512 non supportato."; } ?>
L'output del codice sopra (a seconda del sistema operativo):
DES Standard: stqAdD7zlbByI DES Esteso: _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.