PHP- Crypt()- Funktion
❮ PHP-String-Referenz
Definition und Verwendung
Die Funktion crypt() gibt eine gehashte Zeichenfolge mit DES-, Blowfish- oder MD5-Algorithmen zurück.
Diese Funktion verhält sich auf verschiedenen Betriebssystemen unterschiedlich. PHP prüft, welche Algorithmen verfügbar sind und welche Algorithmen verwendet werden sollen, wenn es installiert wird.
Der Salt-Parameter ist optional. Allerdings erzeugt crypt() ohne das Salt ein schwaches Passwort. Achten Sie darauf, ein ausreichend starkes Salz für eine bessere Sicherheit anzugeben.
Es gibt einige Konstanten, die zusammen mit der Funktion crypt() verwendet werden. Der Wert dieser Konstanten wird von PHP bei der Installation festgelegt.
Konstanten:
- [CRYPT_STD_DES] – Standard-Hash auf DES-Basis mit zwei Zeichen Salt aus dem Alphabet „./0-9A-Za-z“. Die Verwendung ungültiger Zeichen im Salt führt dazu, dass diese Funktion fehlschlägt.
- [CRYPT_EXT_DES] – Erweiterter DES-basierter Hash mit einem Salt aus neun Zeichen, bestehend aus einem Unterstrich, gefolgt von 4 Byte Iterationszähler und 4 Byte Salt. Diese sind als druckbare Zeichen kodiert, 6 Bit pro Zeichen, niedrigstwertiges Zeichen zuerst. Die Werte 0 bis 63 werden als „./0-9A-Za-z“ kodiert. Die Verwendung ungültiger Zeichen im Salt führt dazu, dass die Funktion fehlschlägt.
- [CRYPT_MD5] – MD5-Hashing mit einem 12-stelligen Salt, beginnend mit $1$
- [CRYPT_BLOWFISH] – Blowfish-Hashing mit einem Salt, das mit $2a$, $2x$ oder $2y$ beginnt, einem zweistelligen Kostenparameter „$“ und 22 Zeichen aus dem Alphabet „./0-9A-Za-z“ . Die Verwendung von Zeichen außerhalb des Alphabets führt dazu, dass diese Funktion eine Zeichenfolge der Länge Null zurückgibt. Der Parameter "$" ist der Basis-2-Logarithmus der Iterationsanzahl für den zugrunde liegenden Blowfish-Bash-Hash-Algorithmus und muss im Bereich 04-31 liegen. Werte außerhalb dieses Bereichs führen zum Fehlschlagen der Funktion.
- [CRYPT_SHA_256] – SHA-256-Hash mit einem 16-stelligen Salt, beginnend mit $5$. Wenn der Salt-String mit „rounds=<N>$“ beginnt, wird der numerische Wert von N verwendet, um anzugeben, wie oft die Hashing-Schleife ausgeführt werden soll, ähnlich wie der Kostenparameter bei Blowfish. Die Standardanzahl der Runden ist 5000, es gibt ein Minimum von 1000 und ein Maximum von 999.999.999. Jede Auswahl von N außerhalb dieses Bereichs wird auf die nächste Grenze abgeschnitten.
- [CRYPT_SHA_512] – SHA-512-Hash mit einem 16-stelligen Salt, beginnend mit $6$. Wenn der Salt-String mit „rounds=<N>$“ beginnt, wird der numerische Wert von N verwendet, um anzugeben, wie oft die Hashing-Schleife ausgeführt werden soll, ähnlich wie der Kostenparameter bei Blowfish. Die Standardanzahl der Runden ist 5000, es gibt ein Minimum von 1000 und ein Maximum von 999.999.999. Jede Auswahl von N außerhalb dieses Bereichs wird auf die nächste Grenze abgeschnitten.
Auf Systemen, auf denen diese Funktion mehrere Algorithmen unterstützt, werden die obigen Konstanten auf „1“ gesetzt, wenn sie unterstützt werden, und ansonsten auf „0“.
Hinweis: Es gibt keine Entschlüsselungsfunktion. Die Funktion crypt() verwendet einen Einwegalgorithmus.
Syntax
crypt(str,salt)
Parameterwerte
Parameter | Description |
---|---|
str | Required. Specifies the string to be hashed |
salt | Optional. A salt string to base the hashing on |
Technische Details
Rückgabewert: | Gibt die codierte Zeichenfolge oder eine Zeichenfolge zurück, die kürzer als 13 Zeichen ist und sich bei einem Fehler garantiert vom Salt unterscheidet |
---|---|
PHP-Version: | 4+ |
Änderungsprotokoll: | PHP 5.6.0 - Zeigt eine E_NOTICE-Sicherheitswarnung an, wenn Salt weggelassen wird. PHP 5.3.7 - Blowfish-Modi $2x$ und $2y$ hinzugefügt. PHP 5.3.2 - SHA-256 und SHA-512 hinzugefügt. Behobenes Blowfish-Verhalten bei ungültigen Runden gibt „failure“-Zeichenfolge („*0“ oder „*1“) zurück, anstatt auf DES zurückzugreifen. PHP 5.3.0 - PHP enthält jetzt eine eigene Implementierung für MD5-Crypt, Standard-DES, Extended-DES und die Blowfish-Algorithmen und wird diese verwenden, wenn das System einen oder mehrere der Algorithmen nicht unterstützt. |
Mehr Beispiele
Beispiel
In diesem Beispiel testen wir die verschiedenen Algorithmen:
<?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.";
}
?>
Die Ausgabe des obigen Codes könnte sein (je nach Betriebssystem):
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.
❮ PHP-String-Referenz