PHP crypt() Funktion

Definition und Verwendung

Die crypt()-Funktion gibt eine Zeichenkette zurück, die mit DES, Blowfish oder MD5-Algorithmus verschlüsselt wurde.

Das Verhalten der Funktion variiert auf verschiedenen Betriebssystemen, einige Betriebssysteme unterstützen eine Vielzahl von Algorithmustypen. Bei der Installation überprüft PHP, welche Algorithmen verfügbar sind und welche verwendet werden.

Der spezifische Algorithmus hängt vom Format und der Länge des Salzwertparameters ab. Durch die Erhöhung der Anzahl der durch eine spezifische Verschlüsselungsmethode generierten Zeichenketten kann der Salzwert die Sicherheit der Verschlüsselung erhöhen.

Hier sind einige Konstanten, die zusammen mit der crypt()-Funktion verwendet werden. Diese Konstantenwerte werden bei der Installation von PHP gesetzt.

Konstanten:

[CRYPT_SALT_LENGTH] Standardlänge der Verschlüsselung. Die Standard DES-Verschlüsselung hat eine Länge von 2.
[CRYPT_STD_DES] Hash basierend auf dem Standard DES-Algorithmus, der zwei Zeichen aus den Zeichen \
[CRYPT_EXT_DES] Erweiterter Hash basierend auf dem DES-Algorithmus. Der Salzwert ist eine Zeichenkette von 9 Zeichen, bestehend aus einem Unterstrich gefolgt von 4 Byte der Wiederverwendungsrate und 4 Byte des Salzwerts. Sie werden in druckbare Zeichen codiert, wobei jeder Zeichen 6 Bits hat, und die Zeichen mit den wenigen gültigen Bits werden bevorzugt. 0 bis 63 werden codiert als \
[CRYPT_MD5] Die MD5-Hash verwendet einen 12-Zeichen-String-Salt, der mit $1$ beginnt.
[CRYPT_BLOWFISH] Der Blowfish-Algorithmus verwendet den folgenden Salt: "$2a$", ein zweistelliger cost-Parameter, "$" und eine 64-stellige Zeichenfolge, die aus den Zeichen "./0-9A-Za-z" besteht. Die Verwendung von Zeichen außerhalb dieses Bereichs im Salt führt dazu, dass crypt() einen leeren String zurückgibt. Der zweistellige cost-Parameter ist der Logarithmus der Zyklusanzahl mit Basis 2, der in der Range 04-31 liegt. Werte außerhalb dieses Bereichs führen dazu, dass crypt() fehlschlägt.
CRYPT_SHA256 Der SHA-256-Algorithmus verwendet einen 16-Zeichen-String-Salt, der mit $5$ beginnt, um zu hashen. Wenn der Salt-String mit "rounds=<N>$" beginnt, wird der numerische Wert von N verwendet, um die Anzahl der Hash-Zyklen auszuführen, was dem cost-Parameter der Blowfish-Algorithmen ähnlich ist. Die Standard-Zyklusanzahl beträgt 5000, das Minimum ist 1000 und das Maximum ist 999,999,999. Werte von N außerhalb dieses Bereichs werden in den nächsten Wert umgewandelt.
CRYPT_SHA512 Der SHA-512-Algorithmus verwendet einen 16-Zeichen-String-Salt, der mit $6$ beginnt, um zu hashen. Wenn der Salt-String mit "rounds=<N>$" beginnt, wird der numerische Wert von N verwendet, um die Anzahl der Hash-Zyklen auszuführen, was dem cost-Parameter der Blowfish-Algorithmen ähnlich ist. Die Standard-Zyklusanzahl beträgt 5000, das Minimum ist 1000 und das Maximum ist 999,999,999. Werte von N außerhalb dieses Bereichs werden in den nächsten Wert umgewandelt.

Auf Systemen, die mehrere Algorithmen unterstützen, wird bei Unterstützung der oben genannten Konstanten auf "1" gesetzt, andernfalls auf "0".

Anmerkung:Es gibt keine entsprechenden Entschlüsselungsfunktionen. Die crypt()-Funktion verwendet ein unidirektionales Algorithmus.

Syntax

crypt(str,Salt)
Parameter Beschreibung
str Erforderlich. Bestimmt den zu kodierenden String.
Salt Optional. Eine Zeichenfolge, die die Anzahl der zu kodierenden Zeichen erhöht, um die Sicherheit der Kodierung zu erhöhen. Wenn der Salt-Parameter nicht bereitgestellt wird, generiert PHP bei jedem Aufruf der Funktion zufällig einen.

Technische Details

Rückgabewert: Rückgabe des verschlüsselten Strings oder eines Strings, der weniger als 13 Zeichen hat, um sicherzustellen, dass er im Falle eines Fehlschlags vom Salt unterscheidbar ist.
PHP-Version: 4+

更新日志

Version Beschreibung
5.3.2 Basierend auf der Implementierung von Ulrich Drepper, wurde die crypt Funktion für die SHA-256 und SHA-512 Algorithmen hinzugefügt.
5.3.2 Behebt das Problem mit dem Blowfish Algorithmus, das durch unzulässige Zyklen verursacht wird, und gibt den String "Fehlgeschlagen" zurück ("*0" oder "*1") anstatt auf den DES Algorithmus umzuschalten.
5.3.0 PHP enthält jetzt seine eigene MD5 Crypt Implementierung, einschließlich der Standard DES Algorithmen, der erweiterten DES Algorithmen sowie der Blowfish Algorithmen. Wenn das System keine entsprechende Implementierung hat, verwendet PHP seine eigene Implementierung.

Beispiel

Beispiel 1

In diesem Beispiel werden wir verschiedene Algorithmen testen:

<?php
// Zweizeichen Salt
if (CRYPT_STD_DES == 1)
{
echo "Standard DES: ".crypt('something','st')."\n<br>";
}
else
{
echo "Standard DES nicht unterstützt.\n<br>";
}
// 4 Zeichen Salt
if (CRYPT_EXT_DES == 1)
{
echo "Erweiterte DES: ".crypt('something','_S4..some')."\n<br>";
}
else
{
echo "Erweiterte DES nicht unterstützt.\n<br>";
}
// Mit $1$ beginnende 12 Zeichen
if (CRYPT_MD5 == 1)
{
echo "MD5: ".crypt('something','$1$somethin$')."\n<br>";
}
else
{
echo "MD5 nicht unterstützt.\n<br>";
}
// Mit $2a$ beginnende Salt. Zweistellige cost Parameter: 09. 22 Zeichen
if (CRYPT_BLOWFISH == 1)
{
echo "Blowfish: ".crypt('something','$2a$09$anexamplestringforsalt$')."\n<br>";
}
else
{
echo "Blowfish DES nicht unterstützt.\n<br>";
}
// Mit $5$ beginnende 16-Bit-Salz. Der Standardwert für die Anzahl der Runden ist 5000.
if (CRYPT_SHA256 == 1)
{
echo "SHA-256: ".crypt('something','$5$rounds=5000$anexamplestringforsalt$')."\n<br>";
else
{
echo "SHA-256 nicht unterstützt.\n<br>";
}
// Mit $5$ beginnende 16-Bit-Salz. Der Standardwert für die Anzahl der Runden ist 5000.
if (CRYPT_SHA512 == 1)
{
echo "SHA-512: ".crypt('etwas','$6$rounds=5000$anexamplestringforsalt$');
}
else
{
echo "SHA-512 nicht unterstützt.";
}
?>

Die Ausgabe des obigen Codes (abhängig vom Betriebssystem):

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