PHP crypt()-funktionen
Definition och användning
crypt()-funktionen returnerar en sträng som har krypterats med DES, Blowfish eller MD5-algoritmen.
Funktionens beteende varierar på olika operativsystem, vissa operativsystem stöder en eller flera algoritmtyper. Vid installationen kontrollerar PHP vilka algoritmer som är tillgängliga och vilka som används.
Den specifika algoritmen beror på format och längd på salt-argumentet. Genom att öka antalet strängar som genereras av en specifik krypteringsmetod kan salt göra krypteringen säkrare.
Här finns några konstanter som används tillsammans med crypt()-funktionen. Dessa konstantvärden sätts av PHP vid installationen.
Konstanter:
[CRYPT_SALT_LENGTH] | Standard encryption length. Använder standard DES-encryption, length of 2 |
[CRYPT_STD_DES] | Hashning baserad på standard DES-algoritmen använder två tecken från tecknen "/./0-9A-Za-z" som saltvärde. Användning av otillåtna tecken i saltvärdet leder till misslyckande av crypt(). |
[CRYPT_EXT_DES] | Utökad hashning baserad på DES-algoritmen. Saltvärdet är en sträng av 9 tecken, bestående av en understrening följt av 4 bytes repetitionsfrekvens och 4 bytes saltvärde. De kódas till utskrivbara tecken, varje tecken 6 bitar, med minst effektiva bitar som prioriteras. 0 till 63 kódas som "/./0-9A-Za-z". Användning av otillåtna tecken i saltvärdet leder till misslyckande av crypt(). |
[CRYPT_MD5] | MD5-kryptering använder en 12-tecken lång saltsträng som börjar med $1$. |
[CRYPT_BLOWFISH] | Blowfish-algoritmen använder följande salt: "$2a$", en tvåsiffrig cost-argument, "$" och en 64-bitars sträng som är en kombination av tecken från "./0-9A-Za-z". Användning av tecken utanför detta intervall i saltet kommer att leda till att crypt() returnerar en tom sträng. Tvåsiffriga cost-argumentet är logaritmen av antalet cykler i bas 2, och dess intervall är 04-31. Om intervallet överskrids kommer crypt() att misslyckas. |
CRYPT_SHA256 | SHA-256-algoritmen använder en 16-tecken lång saltsträng som börjar med $5$ för att skapa en kryptering. Om saltsträngen börjar med "rounds=<N>$", används det numeriska värdet av N för att specificera antalet hash-cykler som ska köras, vilket liknar cost-argumentet för Blowfish-algoritmen. Standardantalet cykler är 5000, minst är 1000, och störst är 999,999,999. N-värden utanför detta intervall kommer att konverteras till närmaste värde. |
CRYPT_SHA512 | SHA-512-algoritmen använder en 16-tecken lång saltsträng som börjar med $6$ för att skapa en kryptering. Om saltsträngen börjar med "rounds=<N>$", används det numeriska värdet av N för att specificera antalet hash-cykler som ska köras, vilket liknar cost-argumentet för Blowfish-algoritmen. Standardantalet cykler är 5000, minst är 1000, och störst är 999,999,999. N-värden utanför detta intervall kommer att konverteras till närmaste värde. |
På system som stöder flera algoritmer, sätt till "1" om de ovanstående konstanterna stöds, annars till "0".
Kommentarer:Det finns ingen motsvarande dekrypteringsfunktion. crypt()-funktionen använder en enkelriktad algoritm.
Syntaks
crypt(str,salt)
Parametrar | Beskrivning |
---|---|
str | Obligatoriskt. Bestämmer den sträng som ska kodas. |
salt | Valfritt. Används för att öka antalet tecken som kodes för att göra koden säkrare. Om salt-argumentet inte tillhandahålls genererar PHP en slumpmässig sträng varje gång funktionen anropas. |
Tekniska detaljer
Returvärde: | Returnera den krypterade strängen eller en sträng med färre än 13 tecken, så att den kan skiljas från saltet vid misslyckanden. |
PHP-version: | 4+ |
Uppdateringslog
Version | Förklaring |
---|---|
5.3.2 | Baserat på Ulrich Dreppers implementering, tillägg crypt baserat på SHA-256-algoritmen och SHA-512-algoritmen. |
5.3.2 | Rättade problemet med att Blowfish-algoritmen returnerar "misslyckades"-strängen ("*0" eller "*1") istället för att använda DES-algoritmen på grund av ogiltig cykel. |
5.3.0 | PHP innehåller nu sitt egna MD5 Crypt-implementation, inklusive standard DES-algoritmen, utökade DES-algoritmen samt Blowfish-algoritmen. Om systemet saknar den nödvändiga implementeringen, använder PHP sin egen implementation. |
Fall
Exempel 1
I detta exempel kommer vi att testa olika algoritmer:
<?php // Två tecken salt if (CRYPT_STD_DES == 1) { echo "Standard DES: ".crypt('something','st')."\n<br>"; } else { echo "Standard DES inte stöds.\n<br>"; } // 4 tecken salt if (CRYPT_EXT_DES == 1) { echo "Utökad DES: ".crypt('something','_S4..some')."\n<br>"; } else { echo "Utökad DES inte stöds.\n<br>"; } // Börjar med $1$. 12 tecken if (CRYPT_MD5 == 1) { echo "MD5: ".crypt('something','$1$somethin$')."\n<br>"; } else { echo "MD5 inte stöds.\n<br>"; } // Salt börjar med $2a$. Doubelnummer cost parameter: 09. 22 tecken if (CRYPT_BLOWFISH == 1) { echo "Blowfish: ".crypt('something','$2a$09$anexamplestringforsalt$')."\n<br>"; } else { echo "Blowfish DES inte stöds.\n<br>"; } // 以 $5$ 开始的 16 字符 salt。周长的默认数是 5000。 if (CRYPT_SHA256 == 1) { echo "SHA-256: ".crypt('something','$5$rounds=5000$anexamplestringforsalt$')."\n<br>"; else { echo "SHA-256 not supported.\n<br>"; } // 以 $5$ 开始的 16 字符 salt。周长的默认数是 5000。 if (CRYPT_SHA512 == 1) { echo "SHA-512: ".crypt('something','$6$rounds=5000$anexamplestringforsalt$'); } else { echo "SHA-512 not supported."; } ?>
上面的代码的输出(取决于操作系统):
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.