PHP crypt() functie
Definitie en gebruik
De crypt() functie retourneert een string die is geëncrypteerd met DES, Blowfish of MD5-algoritme.
Het gedrag van de functie verschilt op verschillende besturingssystemen, sommige besturingssystemen ondersteunen meer dan één algoritme-type. Tijdens de installatie controleert PHP welke algoritmen beschikbaar zijn en welke algoritme wordt gebruikt.
Het specifieke algoritme hangt af van het formaat en de lengte van het zoutparameter. Door het aantal strings te verhogen die door een specifieke encryptiemethode worden gegenereerd, kan het zout de encryptie veiliger maken.
Hier zijn enkele constanten die samen met de crypt() functie worden gebruikt. De waarden van deze constanten worden ingesteld tijdens de installatie door PHP.
Constanten:
[CRYPT_SALT_LENGTH] | Standaard encryptielengte. Gebruikt standaard DES-encryptie, lengte van 2. |
[CRYPT_STD_DES] | Hashing gebaseerd op de standaard DES-algoritme gebruikt twee tekens uit de set "/./0-9A-Za-z" als zoutwaarde. Het gebruik van ongeldig karakters in de zoutwaarde zal leiden tot mislukking van crypt(). |
[CRYPT_EXT_DES] | Geëxtrapoleerde hashing gebaseerd op de DES-algoritme. De zoutwaarde is een tekenreeks van 9 karakters, bestaande uit 1 onderstreep gevolgd door 4 bytes van de cirkelgang en 4 bytes van de zoutwaarde. Ze worden gecodeerd naar afdrukbare tekens, waarbij elk teken 6 bits bevat, waarbij de teken met het minste aantal effectieve bits als voorkeur wordt genomen. De waarden van 0 tot 63 worden gecodeerd naar "/./0-9A-Za-z". Het gebruik van ongeldig karakters in de zoutwaarde zal leiden tot mislukking van crypt(). |
[CRYPT_MD5] | MD5 hashing gebruikt een 12-teken string salt die begint met $1$. |
[CRYPT_BLOWFISH] | Het Blowfish-algoritme gebruikt de volgende salt: "$2a$", een twee-cijferige cost parameter, "$" en een 64-teken string samengesteld uit karakters van "./0-9A-Za-z". Het gebruik van karakters buiten dit bereik in de salt leidt tot het retourneren van een lege string door crypt(). Twee-cijferige cost parameters zijn de logarithmen van de cycli met basis 2, met een bereik van 04-31. Buiten dit bereik vallende waarden leiden tot falen van crypt(). |
CRYPT_SHA256 | Het SHA-256-algoritme gebruikt een 16-teken string salt die begint met $5$ voor hashing. Als de salt string begint met "rounds=<N>$", wordt het numerieke waarde van N gebruikt om het aantal hash cycli die moeten worden uitgevoerd te specificeren, wat erg lijkt op de cost parameter van de Blowfish-algoritme. De standaard cycli zijn 5000, het minimum is 1000 en het maximum is 999,999,999. Waarden van N buiten dit bereik worden omgezet in de dichtstbijzijnde waarde. |
CRYPT_SHA512 | De SHA-512-algoritme gebruikt een 16-teken string salt die begint met $6$ voor hashing. Als de salt string begint met "rounds=<N>$", wordt het numerieke waarde van N gebruikt om het aantal hash cycli die moeten worden uitgevoerd te specificeren, wat erg lijkt op de cost parameter van de Blowfish-algoritme. De standaard cycli zijn 5000, het minimum is 1000 en het maximum is 999,999,999. Waarden van N buiten dit bereik worden omgezet in de dichtstbijzijnde waarde. |
Op systemen die meerdere algoritmen ondersteunen, wordt indien de bovengenoemde constanten worden ondersteund, ingesteld op "1", anders op "0".
Opmerking:Er is geen bijbehorende decryptiefunctie. De crypt() functie gebruikt een eenrichtingsalgoritme.
Syntax
crypt(str,salt)
Parameters | Beschrijving |
---|---|
str | Verplicht. Bepaalt de te coderen string. |
salt | Optioneel. Gebruikt om het aantal te coderen tekens te verhogen, om de codering veiliger te maken. Als de salt parameter niet wordt verstrekt, genereert PHP elke keer bij het aanroepen van de functie een willekeurige salt. |
Technische details
Retournerende waarde: | Retourneer de gecodeerde string of een string met minder dan 13 tekens, zodat het bij falen kan onderscheiden worden van de salt. |
PHP versie: | 4+ |
Update log
Versie | Verklaring |
---|---|
5.3.2 | Op basis van de implementatie van Ulrich Drepper, toegevoegd crypt op basis van SHA-256-algoritme en SHA-512-algoritme. |
5.3.2 | Gecorrigeerd van het probleem met de Blowfish-algoritme vanwege ongeldige cycli, die de string "fout" retourneert ("*0" of "*1") in plaats van over te schakelen naar het DES-algoritme. |
5.3.0 | PHP bevat nu zijn eigen MD5 Crypt implementatie, inclusief de standaard DES-algoritme, de uitgebreide DES-algoritme en het Blowfish-algoritme. Als het systeem de juiste implementatie mist, zal PHP zijn eigen implementatie gebruiken. |
Voorbeeld
Voorbeeld 1
In deze voorbeeld, zullen we verschillende algoritmen testen:
<?php // Twee tekens salt if (CRYPT_STD_DES == 1) { echo "Standard DES: ".crypt('something','st')."\n<br>"; } else { echo "Standard DES not supported.\n<br>"; } // Vier tekens salt if (CRYPT_EXT_DES == 1) { echo "Extended DES: ".crypt('something','_S4..some')."\n<br>"; } else { echo "Extended DES not supported.\n<br>"; } // Met $1$ begonnen 12 tekens if (CRYPT_MD5 == 1) { echo "MD5: ".crypt('something','$1$somethin$')."\n<br>"; } else { echo "MD5 not supported.\n<br>"; } // Met $2a$ begonnen Salt. Tweecijferige cost parameter: 09. 22 tekens if (CRYPT_BLOWFISH == 1) { echo "Blowfish: ".crypt('something','$2a$09$anexamplestringforsalt$')."\n<br>"; } else { echo "Blowfish DES not supported.\n<br>"; } // Met $5$ beginnende 16 tekens salt. De standaard aantal rounds is 5000. if (CRYPT_SHA256 == 1) { echo "SHA-256: ".crypt('something','$5$rounds=5000$anexamplestringforsalt$')."\n<br>"; else { echo "SHA-256 niet ondersteund.\n<br>"; } // Met $5$ beginnende 16 tekens salt. De standaard aantal rounds is 5000. if (CRYPT_SHA512 == 1) { echo "SHA-512: ".crypt('something','$6$rounds=5000$anexamplestringforsalt$'); } else { echo "SHA-512 niet ondersteund."; } ?>
De uitvoer van de bovenstaande code (afhankelijk van het besturingssysteem):
Standaard DES: stqAdD7zlbByI Uitgebreide 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.