PHP 4.3

14.4.2 Verschlüsselung mit crypt()

crypt() liefert, ähnlich wie md5(), eine irreversibel verschlüsselte Zeichenkette zurück. Dabei kommt die auf dem DES-Verfahren basierende Standard-Verschlüsselungsmethode von UNIX zum Einsatz. Ein Vorteil des Einsatzes der Funktion crypt() gegenüber md5() bietet sich für UNIX-Anwender oder Programmierer, die für das Zielsystem UNIX entwickeln, da bestehende Passwortdateien mitgenutzt werden können.

Leider steht die Funktion auf Windows-Systemen nicht zur Verfügung, da betriebssystemseitig kein solcher Verschlüsselungsmechanismus implementiert wurde. Weichen Sie als Benutzer eines Webservers auf einem Windows-System daher auf die bereits vorgestellte Funktion md5() aus.

Als Parameter erwartet die Funktion eine zu verschlüsselnde Zeichenkette und optional einen 2 Zeichen langen sogenannten Salt-String, der die Verschlüsselung steuert. Wenn Sie keinen Salt-String angeben, wird er von PHP automatisch selbst erzeugt. Innerhalb des Aufrufs der Funktion wird jedoch nur einmal ein Salt-String erzeugt. Die Funktion crypt() sollte daher nicht wiederholt aufgerufen werden, da dies unter Umständen Auswirkung auf die Sicherheit der Funktion hat.

In Abhängigkeit vom Betriebssystem des Web-Servers können aber auch mit crypt() unterschiedliche Verschlüsselungsmechanismen zum Einsatz kommen. Manche Betriebssysteme verwenden anstelle des DES-basierten Verfahrens das MD5-Verfahren. Während der Installation prüft PHP, welche Verschlüsselungsmechanismen betriebssystemseitig unterstützt werden. Die Wahl der Verschlüsselungsmethode kann dann auch durch den Salt-String angegeben werden. Wenn das Betriebssystem keine andere Verschlüsselung anbietet, erzeugt PHP selbst einen 2 Zeichen Salt für die DES-basierte Methode bzw. auf entsprechenden Systemen einen längeren Salt für das auf MD5 basierende Verfahren.

Auf Systemen, die das DES-basierte Verfahren einsetzen, bildet der Salt-String die ersten beiden Zeichen in der zurückgelieferten Zeichenkette.

Anhand der von PHP erzeugten Konstante CRYPT_SALT_LENGTH können Sie prüfen, welchen der beiden Salt-Typen PHP benutzt. Deneben existieren weitere Konstanten, die auf die Werte 0 oder 1 gesetzt werden, je nachdem, ob eine bestimmte Verschlüsselungsmethode auf dem jeweiligen Betriebssystem verfügbar ist.

CRYPT_STD_DES - DES-basiertes Verfahren mit 2-Zeichen-Salt
CRYPT_EXT_DES - Erweitertes DES-basiertes Verfahren mit einem 9-Zeichen-Salt
CRYPT_MD5 - MD5-Verfahren mit 12-Zeichen-Salt, beginnend mit $1$
CRYPT_BLOWFISH - Blowfish-basiertes Verfahren, 16-Zeichen-Salt, beginnend mit $2$

Wie Sie anhand des folgenden Beispiels erkennen können, benötigen wir den Salt-String des gespeicherten Passwortes, um die Variable $klartext_passwort auf die gleiche Art und Weise verschlüsseln zu können und einen Vergleich durchzuführen.

ein Beispiel:
<?php

  $klartext_passwort = "geheim"; // kein wirklich gutes Passwort (siehe oben)
  $gespeichertes_passwort = "Ow5pphTWlRtSs";
  $salt = substr($gespeichertes_passwort, 0, 2);
  $verschluesseltes_passwort = crypt($klartext_passwort, $salt);

  if ($gespeichertes_passwort == $verschluesseltes_passwort) {
    echo "Passwörter sind gleich.";
  } else {
    echo "Passwörter sind nicht gleich.";
  }

?>

    



Browserausgabe:
Passwörter sind gleich.

Kommentare (0)

Ihr Kommentar

Name