PHP-Logo
Druckansicht von http://www.php-homepage.de/manual/function.crypt.php

PHP-Logo
[ Main Menue ]
Homepage
Downloads
Artikel
Scripts
Forum
PHP-Manual
Links
News
Freelancer
Bücher
RuDolF
Suche
Misc
Über diese Seite
Kontakt
Wunschzettel
MyGuestbook
*
[ Suche ]
*
[ Manual ]
String-Funktionen
*

Follow on Twitter - @phphomepage

RSS Feed blogoscoop
 crc32  Letztes Update:
18.05.2012
echo 

crypt

(PHP 4, PHP 5)

cryptEinweg-String-Hashing

Beschreibung

string crypt ( string $str [, string $salt ] )

crypt() gibt einen Hash-String zurück, der unter Verwendung des DES-basierenden Unix-Standard-Hashingalgorithmus oder einem anderen auf ihrem System verfügbaren Algorithmus erstellt wurde.

Einige Betriebssystem unterstützen mehr als eine Methode zum Hashen. So wird manchmal der DES- durch einen MD5-Algorithmus ersetzt. Der verwendete Algorithmus wird durch das Salt-Argument bestimmt. Vor PHP 5.3 wurden die verfügbaren Algorithmen zum Installationszeitpunkt anhand der systemeigenen crypt() Funktion untersucht. Wird kein Salt angegeben, erzeugt PHP entweder einen 12-Zeichen MD5 Salt oder, falls MD5 nicht verfügbar ist, einen einen 2-Zeichen DES-Salt. PHP setzt eine Konstante CRYPT_SALT_LENGTH, welche die Länge des längsten von den Algorithmen unterstützen Salts enthält.

Der Standard-DES-Algorithmus gibt den Salt als erste 2 Zeichen zurück. Weiterhin werden nur die ersten acht Zeichen von str genutzt. Wenn also eine längere Zeichenkette verwendet wird, die mit den selben 8 Buchstaben beginnt, so erhalten Sie denselben Rückgabewert (sofern Sie ebenfalls den gleichen Salt genutzt haben).

Auf Systemen, wo crypt() mehrere Hashingalgorithmen 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-Hash mit einem 2-Zeichen-Salt aus dem Alphabet "./0-9A-Za-z". Bei Nutzung eines ungültigen Zeichens schlägt crypt() fehl.
  • CRYPT_EXT_DES - Erweiterte DES-basiertes Hashing mit einem 9-Zeichen-Salt, welcher aus einem Unterstrich, 4 Zeichen Iterationsanzahl und 4 Zeichen Salt besteht. Iterationsanzahl und Salt werden dargestellt durch Zeichen aus dem Alphabet "./0-9A-Za-z" dargestellt. Bei Nutzung eines ungültigen Zeichens schlägt crypt() fehl.
  • CRYPT_MD5 - MD5-Hashing mit 12-Zeichen-Salt, beginnend mit "$1$"
  • CRYPT_BLOWFISH - Blowfish-Hash mit 22-Zeichen-Salt folgenden Aufbaus: "$2a$", gefolgt von einem zweistelligen Kostenparameter, einem weiteren "$", und 22 Zahlen des Alphabets "./0-9A-Za-z". Bei Nutzung eines ungültigen Zeichens gibt crypt() einen leeren String zurück. Der zweistellige Kostenparameter ist der binäre Logarithmus der Iterationsanzahl und muss im Bereich von 04-31 liegen. Bei Nutzung von Werten außerhalb dieses Bereichs schlägt crypt() fehl.
  • CRYPT_SHA256 - SHA-256 Hash mit einem 16-Zeichen Salt, beginnend mit "$5$". Wenn anschließend "rounds=<N>$" folgt, gibt der Zahlenwert von N die Iterationsanzahl an, ansonsten wird 5000 als Anzahl angenommen. Die Anzahl muss zwischen 1000 und 999,999,999 liegen. Falls ein Wert außerhalb dieses Bereichs angegeben wird, wird die jeweils näher liegende Grenze als Anzahl genutzt.
  • CRYPT_SHA512 - SHA-512 Hash mit einem 16-Zeichen Salt, beginnend mit "$6$". Wenn anschließend "rounds=<N>$" folgt, gibt der Zahlenwert von N die Iterationsanzahl an, ansonsten wird 5000 als Anzahl angenommen. Die Anzahl muss zwischen 1000 und 999,999,999 liegen. Falls ein Wert außerhalb dieses Bereichs angegeben wird, wird die jeweils näher liegende Grenze als Anzahl genutzt.

Hinweis:

Seit PHP 5.3.0 enthält PHP eine eigene Implementation und verwendet diese, wenn das System einen oder mehrere der Algorithmen nicht unterstützt.

Parameter-Liste

str

Die zu hashende Zeichenkette.

salt

Ein optionaler Salt-String, der die Schlüsselbasis bildet. Falls dieser nicht angegeben wird hängt das Verhalten von der Implementierung des Algorithmus ab und kann daher zu unerwarteten Ergebnissen führen. (Wenn beispielsweise ein Server MD5 unterstützt und der andere nur DES, dann würden beide unterschiedliche Rückgabewerte produzieren, obwohl der String eigentlich gleich ist.)

Rückgabewerte

Gibt die gehashte Zeichenkette zurück oder im Fehlerfall eine Zeichenkette, die kürzer ist als 13 Zeichen und garantiert ist, nicht dem Salt zu entsprechen.

Changelog

Version Beschreibung
5.3.2 SHA-256 und SHA-512 wurden hinuzgefügt auf Basis von Ulrich Drepper's » Implementierung.
5.3.2 Blowfishs fehlerhaftes Verhalten wurde behoben, durch welches ein ungültiger Kostenparameter dazu führte, dass auf DES zurückgefallen wurde, anstatt einen Fehlerstring ("*0" or "*1") zurückzugeben.
5.3.0 PHP enthält jetzt eine eigene Implementation der MD5-Crypt, Standard DES, Extended DES und des Blowfish-Algorithmus und verwendet diese, wenn das System eine oder mehrere der Algorithmen nicht unterstützt.

Beispiele

Beispiel #1 crypt()-Beispiele

<?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 Hasharten

<?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$usesomesillystringforsalt$') . "\n";
}

if (
CRYPT_SHA256 == 1) {
    echo 
'SHA-256:      ' crypt('rasmuslerdorf''$5$rounds=5000$usesomesillystringforsalt$') . "\n";
}

if (
CRYPT_SHA512 == 1) {
    echo 
'SHA-512:      ' crypt('rasmuslerdorf''$6$rounds=5000$usesomesillystringforsalt$') . "\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$usesomesillystringfore2uDLvp1Ii2e./U9C8sBjqp8I90dH6hi
SHA-256:      $5$rounds=5000$usesomesillystri$KqJWpanXZHKq2BOB43TSaYhEWsQ1Lr5QNyPCDH/Tp.6
SHA-512:      $6$rounds=5000$usesomesillystri$D4IrlXatmP7rx3P3InaxBeoomnAihCKRVQP22JZ6EY47Wc6BkroIuUUBOov1i.S5KPgErtP/EN5mcO.ChWQW21

Anmerkungen

Hinweis: Es existiert keine decrypt Funktion, da crypt() ein Einweg-Algorithmus ist.

Siehe auch

  • md5() - Errechnet den MD5-Hash eines Strings
  • Die Mcrypt-Erweiterung
  • Lesen Sie die Man-Pages ihres Unix-Systems, wenn Sie weitere Informationen zu crypt benötigen.

© Copyright 1999 - 2011 by Mark Kronsbein | Impressum | NutzungsbedingungenWeiterempfehlen | Seitenanfang
0.0527