PHP Handbuch
Zurück |  | Weiter

# crypt

(PHP 3, PHP 4, PHP 5)

crypt -- Einweg-String-Verschlüsselung (Hashbildung)

## 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. Die zu übergebenden Argumente sind der zu verschlüsselnde String und optional ein Salt-String, der die Schlüsselbasis bildet. Lesen Sie die Man-Pages ihres Unix-Systems, wenn Sie weitere Informationen zu Crypt benötigen.

Ist kein Salt-Argument angegeben, wird es von PHP nach dem Zufalls-Prinzip bei jedem Aufruf der Funktion neu erzeugt.

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 existiert MD5. In diesem Fall wird PHP einen zufälligen MD5-kompatiblen Salt generieren. PHP erzeugt eine Konstante namens CRYPT_SALT_LENGTH. Diese besagt, ob ihr System ein reguläres 2-Zeichen Salt oder das längere 12-Zeichen MD5-Salt unterstützt.

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.

Die Standard-DES-Verschlüsselung crypt() enthält das 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 encryption with a sixteen character salt starting with $2$ or $2a$ CRYPT_BLOWFISH - Blowfish-Verschlüsselung mit 16-Zeichen Salt, beginnend mit $2$ oder $2a$

> Anmerkung: Es existiert keine decrypt Funktion, da crypt() eine Einweg-Verschlüsselung ist.

Beispiel 1. crypt() Beispiele
`<?php $passwort = crypt('mein_Pwd'); // let the salt be automatically generated /* 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

Siehe auch md5() und die Dokumentation zur Mcrypt-Extension.

Zurück | Zum Anfang | Weiter
crc32 | Nach oben | echo