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.