Function.crypt
Aus PHP-Wiki
crypt — Einweg-String-Verschlüsselung (Hashbildung)
Inhaltsverzeichnis |
Beschreibung
string crypt ( string $str [, string $salt ] )
crypt() einen String zurück, der unter Verwendung
des Unix-Standard-Verschlüsselungsalgorithmus DES
erstellt wurde. Dieser Algorithmus muss auf dem System verfügbar sein.
Einige Betriebssystem unterstützen mehr als eine Methode zur
Verschlüsselung. So wird manchmal der DES- durch einen
MD5-Algorithmus ersetzt. Der verwendete Schlüssel wird durch das
Salt-Argument bestimmt. Zum Installationszeitpunkt untersucht PHP die
vorhandenen Möglichkeiten und wird, abhängig vom Ergebnis dieser
Prüfung, auch andere Schlüssel-Typen zulassen. Wird kein Salt
unterstützt, erzeugt PHP per Voreinstellung einen 2-Zeichen
DES-Salt, es sei denn, auf ihrem System ist MD5 der Standardverschlüsselungstyp.
In diesem Fall wird PHP einen zufälligen MD5-kompatiblen Salt generieren.
PHP setzt eine Konstante namens CRYPT_SALT_LENGTH,
die Ihnen sagt, ob ihr System einen regulären 2-Zeichen-Salt oder den
längeren 12-Zeichen-Salt unterstützt.
Die Standard-DES-Verschlüsselung crypt()
enthält den Salt als erste 2 Zeichen der Ausgabe. Ebenso werden nur die ersten
acht Zeichen von str
berücksichtigt; verwenden Sie also
einen längeren String, der mit den gleichen 8 Buchstaben beginnt, so erhalten
Sie denselben Rückgabewert (sofern Sie ebenfalls den gleichen Salt nutzen).
Auf Systemen, wo die crypt()-Funktion mehrere Verschlüsselungsarten
unterstützt, werden die folgenden Konstanten auf 0 oder 1
gesetzt, je nachdem, ob der entsprechende Typ verfügbar ist:
CRYPT_STD_DES - Standard DES-Schlüssel mit 2-Zeichen-Salt
CRYPT_EXT_DES - Erweiterte DES-basierte Verschlüsselung
mit einem 9-Zeichen-Salt
CRYPT_MD5 - MD5-Verschlüsselung mit 12-Zeichen-Salt,
beginnend mit $1$
CRYPT_BLOWFISH - Blowfish-Verschlüsselung mit
16-Zeichen-Salt, beginnend mit $2$ oder $2a$
Parameter-Liste
- str
- Die zu verschlüsselnde Zeichenkette.
- salt
- Ein optionaler Salt-String, der die Schlüsselbasis bildet. Sofern nicht angegeben, wird von PHP ein zufälliger Wert bei jedem Aufruf der Funktion generiert. Wenn Sie das gegebene Salt benutzen, sollten Sie beachten, dass dieser Wert nur einmal bestimmt wird. Rufen Sie diese Funktion nun mehrmals auf, beeinträchtigt das nicht nur das Ergebnis, sondern unter Umständen auch die Sicherheit.
Rückgabewerte
Gibt die verschlüsselte Zeichenkette zurück.
Beispiele
#1 crypt()
<?php $passwort = crypt('mein_Pwd'); // Der Salt wird automatisch generiert /* Sie sollten das vollständige Ergebnis von crypt() als Salt zum Passwort-Vergleich übergeben, um Problemen mit unterschiedlichen Hash-Algorithmen vorzubeugen. (Wie bereits ausgeführt, verwendet ein Standard-DES-Passwort-Hash einen 2-Zeichen-Salt, ein MD5-basierter hingegen nutzt 12 Zeichen. */ if (crypt($benutzer_eingabe, $passwort) == $passwort) { echo "Passwort stimmt überein!"; } ?>
Beispiel #2 Verwendung von crypt() für htpasswd
<?php // Passwort setzen $passwort = 'mein_Pwd'; // Hash mit automatisch erstelltem Salt generieren $hash = crypt($passwort); ?>
Beispiel #3 Verwendung von crypt() mit verschiedenen Verschlüsselungsarten
<?php if (CRYPT_STD_DES == 1) { echo 'Standard DES: ' . crypt('rasmuslerdorf', 'rl') . "\n"; } if (CRYPT_EXT_DES == 1) { echo 'Extended DES: ' . crypt('rasmuslerdorf', '_J9..rasm') . "\n"; } if (CRYPT_MD5 == 1) { echo 'MD5: ' . crypt('rasmuslerdorf', '$1$rasmusle$') . "\n"; } if (CRYPT_BLOWFISH == 1) { echo 'Blowfish: ' . crypt('rasmuslerdorf', '$2a$07$rasmuslerd...........$') . "\n"; } ?>
Das oben gezeigte Beispiel erzeugt
eine ähnliche Ausgabe wie:Standard DES: rl.3StKT.4T8M Extended DES: _J9..rasmBYk8r9AiWNc MD5: $1$rasmusle$rISCgZzpwk3UhDidwXvin0 Blowfish: $2a$07$rasmuslerd............nIdrcHdxcUxWomQX9j6kvERCFjTg7Ra
Anmerkungen
Hinweis: Es existiert keine decrypt Funktion, da crypt() eine Einweg-Verschlüsselung ist.
Siehe auch
md5() Die Mcrypt-Erweiterung Lesen Sie die Man-Pages ihres Unix-Systems, wenn Sie weitere Informationen zu Crypt benötigen.