PHP crypt() funktion

Definition og brug

crypt() funktionen returnerer en streng krypteret med DES, Blowfish eller MD5-algoritmen.

Funktionens opførsel varierer afhængigt af operativsystemet, nogle operativsystemer understøtter en eller flere algoritmeTyper. Ved installationen tjekker PHP, hvilke algoritmer der er tilgængelige og hvilken algoritme der bruges.

Den specifikke algoritme afhænger af formatet og længden af salt-parameters. Salt kan gøre kryptering mere sikker ved at øge antallet af strenge genereret af den specifikke krypteringsmetode.

Her er nogle konstanter, der bruges sammen med crypt() funktionen. Disse konstanter er sat af PHP ved installationen.

Konstanter:

[CRYPT_SALT_LENGTH] Standard krypteringslængde. Bruger standard DES-kryptering, længde på 2.
[CRYPT_STD_DES] Hash baseret på standard DES-algoritmen bruger to tegn fra tegnene "/./0-9A-Za-z" som saltværdi. Brug af ulovlige tegn i saltværdien vil føre til, at crypt() fejler.
[CRYPT_EXT_DES] Udvidet hash baseret på DES-algoritmen. Saltværdien er en streng på 9 tegn, bestående af 1 understregning efterfulgt af 4 bytes gentagelsesfrekvens og 4 bytes saltværdi. De kodes til skrivbare tegn, hver 6 bit, med mindst effektive bit først. 0 til 63 kodes til "/./0-9A-Za-z". Brug af ulovlige tegn i saltværdien vil føre til, at crypt() fejler.
[CRYPT_MD5] MD5-hashing bruger en 12 tegns streng salt, der starter med $1$.
[CRYPT_BLOWFISH] Blowfish-algoritmen bruger følgende salt: "$2a$", en to-cifret cost parameter, "$" og en 64-bit streng, der består af kombinationer af tegn fra "./0-9A-Za-z". Brug af tegn uden for dette område i saltet vil føre til, at crypt() returnerer en tom streng. To-cifret cost parameter er logaritmen af antallet af cyklusser med base 2, og dens rækkevidde er 04-31. Værdier uden for dette interval vil føre til, at crypt() fejler.
CRYPT_SHA256 SHA-256-algoritmen bruger en 16 tegns streng salt, der starter med $5$, til at hash. Hvis saltet starter med "rounds=<N>$", bruges det numeriske værdi af N til at specificere antallet af hash-cykler, hvilket er meget lig cost parameteren i Blowfish-algoritmen. Standardantallet af cyklusser er 5000, minimum er 1000, og maksimum er 999,999,999. Værdier af N uden for dette interval konverteres til det nærmeste værdi.
CRYPT_SHA512 SHA-512-algoritmen bruger en 16 tegns streng salt, der starter med $6$, til at hash. Hvis saltet starter med "rounds=<N>$", bruges det numeriske værdi af N til at specificere antallet af hash-cykler, hvilket er meget lig cost parameteren i Blowfish-algoritmen. Standardantallet af cyklusser er 5000, minimum er 1000, og maksimum er 999,999,999. Værdier af N uden for dette interval konverteres til det nærmeste værdi.

På systemer, der understøtter flere algoritmer, sættes det til "1", hvis de nævnte konstanter understøttes, ellers sættes det til "0".

Kommentarer:Der er ingen tilsvarende dekrypteringsfunktion. crypt() funktionen bruger en envejsalgoritme.

Syntaks

crypt(str,salt)
Parameter Beskrivelse
str Obligatorisk. Angiver den streng, der skal kodes.
salt Valgfri. Bruges til at øge antallet af kodede tegn for at gøre krypteringen mere sikker. Hvis salt-parameters ikke er angivet, genererer PHP en tilfældig en hver gang funktionen kaldes.

Tekniske detaljer

Returværdi: Returnerer den krypterede streng eller en streng på færre end 13 tegn, så den kan adskilles fra saltet ved fejl.
PHP version: 4+

Opdateringslog

Version Beskrivelse
5.3.2 Baseret på Ulrich Dreppers implementering, tilføjet crypt baseret på SHA-256-algoritmen og SHA-512-algoritmen.
5.3.2 Korrigerede problemet med Blowfish-algoritmen på grund af ulovlige cyklusser, der returnerede strengen "fejl" ("*0" eller "*1") i stedet for at bruge DES-algoritmen.
5.3.0 PHP indeholder nu sin egen MD5 Crypt implementering, herunder standard DES-algoritmen, den udvidede DES-algoritmen samt Blowfish-algoritmen. Hvis systemet mangler den nødvendige implementering, bruger PHP sin egen implementering.

Eksempel

Eksempel 1

I dette eksemplet vil vi teste forskellige algoritmer:

<?php
// To tegn salt
if (CRYPT_STD_DES == 1)
{
echo "Standard DES: ".crypt('something','st')."\n<br>";
}
else
{
echo "Standard DES ikke understøttet.\n<br>";
}
// 4 tegn salt
if (CRYPT_EXT_DES == 1)
{
echo "Udvidet DES: ".crypt('something','_S4..some')."\n<br>";
}
else
{
echo "Udvidet DES ikke understøttet.\n<br>";
}
// Begynder med $1$. 12 tegn
if (CRYPT_MD5 == 1)
{
echo "MD5: ".crypt('something','$1$somethin$')."\n<br>";
}
else
{
echo "MD5 ikke understøttet.\n<br>";
}
// Salt begynder med $2a$. Dobbeltcifret cost parameter: 09. 22 tegn
if (CRYPT_BLOWFISH == 1)
{
echo "Blowfish: ".crypt('something','$2a$09$anexamplestringforsalt$')."\n<br>";
}
else
{
echo "Blowfish DES ikke understøttet.\n<br>";
}
// Salt starter med $5$ og er 16 tegn lang. Standard antal runder er 5000.
if (CRYPT_SHA256 == 1)
{
echo "SHA-256: ".crypt('something','$5$rounds=5000$anexamplestringforsalt$')."\n<br>";
else
{
echo "SHA-256 ikke understøttet.\n<br>";
}
// Salt starter med $5$ og er 16 tegn lang. Standard antal runder er 5000.
if (CRYPT_SHA512 == 1)
{
echo "SHA-512: ".crypt('something','$6$rounds=5000$anexamplestringforsalt$');
}
else
{
echo "SHA-512 ikke understøttet.";
}
?>

Udtrådet kode (afhænger af operativsystemet):

Standard DES: stqAdD7zlbByI
Udvidet 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.