PHP crypt() Functie
❮ Referentie voor PHP-tekenreeksen
Definitie en gebruik
De functie crypt() retourneert een gehashte tekenreeks met behulp van DES-, Blowfish- of MD5-algoritmen.
Deze functie gedraagt zich anders op verschillende besturingssystemen. PHP controleert welke algoritmen beschikbaar zijn en welke algoritmen moeten worden gebruikt wanneer het is geïnstalleerd.
De zoutparameter is optioneel. Echter, crypt() creëert een zwak wachtwoord zonder het zout. Zorg ervoor dat u een zout opgeeft dat sterk genoeg is voor een betere beveiliging.
Er zijn enkele constanten die samen met de functie crypt() worden gebruikt. De waarde van deze constanten wordt ingesteld door PHP wanneer het is geïnstalleerd.
constanten:
- [CRYPT_STD_DES] - Standaard op DES gebaseerde hash met een salt van twee tekens uit het alfabet "./0-9A-Za-z". Als u ongeldige tekens in de salt gebruikt, mislukt deze functie.
- [CRYPT_EXT_DES] - Uitgebreide DES-gebaseerde hash met een salt van negen tekens bestaande uit een onderstrepingsteken gevolgd door 4 bytes iteratietelling en 4 bytes salt. Deze worden gecodeerd als afdrukbare tekens, 6 bits per teken, het minst significante teken eerst. De waarden 0 tot 63 zijn gecodeerd als "./0-9A-Za-z". Als u ongeldige tekens in de salt gebruikt, mislukt de functie.
- [CRYPT_MD5] - MD5-hashing met een salt van 12 tekens beginnend met $1$
- [CRYPT_BLOWFISH] - Blowfish hashing met een salt beginnend met $2a$, $2x$ of $2y$, een tweecijferige kostenparameter "$", en 22 tekens uit het alfabet "./0-9A-Za-z" . Het gebruik van tekens buiten het alfabet zorgt ervoor dat deze functie een tekenreeks met lengte nul retourneert. De parameter "$" is de logaritme met grondtal-2 van de iteratietelling voor de onderliggende hash-algoritmemeter met Blowfish-bashen en moet in het bereik 04-31 liggen. Waarden buiten dit bereik zorgen ervoor dat de functie mislukt.
- [CRYPT_SHA_256] - SHA-256 hash met een salt van 16 tekens beginnend met $5$. Als de salt-reeks begint met "rounds=<N>$", wordt de numerieke waarde van N gebruikt om aan te geven hoe vaak de hash-lus moet worden uitgevoerd, net zoals de parameter cost op Blowfish. Het standaard aantal ronden is 5000, er is een minimum van 1000 en een maximum van 999.999.999. Elke selectie van N buiten dit bereik wordt afgekapt tot de dichtstbijzijnde limiet.
- [CRYPT_SHA_512] - SHA-512 hash met een salt van 16 tekens beginnend met $6$. Als de salt-string begint met "rounds=<N>$", wordt de numerieke waarde van N gebruikt om aan te geven hoe vaak de hash-lus moet worden uitgevoerd, net zoals de parameter cost op Blowfish. Het standaard aantal ronden is 5000, er is een minimum van 1000 en een maximum van 999.999.999. Elke selectie van N buiten dit bereik wordt afgekapt tot de dichtstbijzijnde limiet.
Op systemen waar deze functie meerdere algoritmen ondersteunt, worden de bovenstaande constanten ingesteld op "1" indien ondersteund en op "0" anders.
Opmerking: er is geen decoderingsfunctie. De functie crypt() gebruikt een eenrichtingsalgoritme.
Syntaxis
crypt(str,salt)
Parameterwaarden
Parameter | Description |
---|---|
str | Required. Specifies the string to be hashed |
salt | Optional. A salt string to base the hashing on |
Technische details
Winstwaarde: | Retourneert de gecodeerde tekenreeks of een tekenreeks die korter is dan 13 tekens en die gegarandeerd verschilt van de salt on failure |
---|---|
PHP-versie: | 4+ |
Wijzigingslogboek: | PHP 5.6.0 - Toont een E_NOTICE beveiligingswaarschuwing als zout wordt weggelaten. PHP 5.3.7 - Blowfish-modi van $ 2x$ en $ 2y$ toegevoegd. PHP 5.3.2 - SHA-256 en SHA-512 toegevoegd. Vast Blowfish-gedrag bij ongeldige rondes retourneert de tekenreeks "mislukt" ("*0" of "*1"), in plaats van terug te vallen op DES. PHP 5.3.0 - PHP bevat nu zijn eigen implementatie voor MD5-crypt, Standard DES, Extended DES en de Blowfish-algoritmen en zal die gebruiken als het systeem geen ondersteuning biedt voor een of meer van de algoritmen. |
Meer voorbeelden
Voorbeeld
In dit voorbeeld zullen we de verschillende algoritmen testen:
<?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.";
}
?>
De uitvoer van de bovenstaande code zou kunnen zijn (afhankelijk van het besturingssysteem):
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.
❮ Referentie voor PHP-tekenreeksen