2012-11-04 7 views
9

Was ist die Ausgabelänge von PHP crypt()?Was ist die Ausgabelänge von PHP crypt()?

md5() Ausgabe ist 128 Bits und erzeugen eine Zeichenfolge mit 32 Zeichen, so in der Datenbank setzen Sie das in eine char(32) Spalte, was ist mit der crypt()?

Antwort

19

Hinweis: Es ist völlig beschränkt sich die Frage auf diese Weise zu fragen, siehe http://php.net/crypt

einige weitere Details:

  • Bei Erfolg ist die Länge der zurückgegebenen Zeichenfolge kann variieren zwischen 13 und 123.
  • Die Ausgabelänge hängt vom verwendeten Hashalgorithmus ab. Es bleibt in Ihrer Frage undefiniert.
  • Die Ausgabelänge hängt vom an die Funktion übergebenen Salz ab. Es bleibt in Ihrer Frage undefiniert.
  • crypt gibt immer die Hash-Zeichenfolge oder eine Zeichenfolge zurück, die kürzer als 13 Zeichen ist und die sich im Fehlerfall von der Salzmenge unterscheidet.

Beispiele:

Ermöglicht für einen Standard-DES-basierten Hash leicht mit einem einfachen crypt Anruf und ein gültigen Zwei-Zeichen-Salz beginnen:

13 :: 2 (salt) + 11 (hash - 64 bits, base 64) 

Wenn Sie PHP crypt und speziell MD5 (hier besser benannt: md5crypt, MD5 (Unix), FreeBSD MD5, Cisco-IOS MD5; Hashcat-Modus 500) und eine leere Salz, ist die Ausgabelänge:

26 :: 3 (`$1$`) + 0 (empty salt) + 1 (`$`) + 22 (hash - 128 bits, base 64) 

Wenn auf einem System, in dem crypt defaults PHP zu dem genannten MD5 und es nicht die Angabe eines Salz genannt wird, wird crypt das Salz erzeugen. Dieses Salz ist normalerweise 8 Zeichen lang. Die Ausgabelänge ist dann:

34 :: 3 (`$1$`) + 8 (salt) + 1 (`$`) + 22 (hash) 

In diesem Fall Spalte Ihrer Datenbanktabelle char(32) entweder einen Fehler beim Einfügen melden würde oder gestutzt - je nachdem, welche Datenbankserver Sie verwenden.

Aber das MD5 Beispiel ist moot, ich wählte es aus, weil Sie es in Ihrer Frage haben, aber Sie sollten nicht MD5 mit crypt verwenden (siehe: Md5crypt Password scrambler is no longer considered safe by author).

Werfen wir stattdessen einen Blick auf Blowfish Hashing (CRYPT_BLOWFISH). Es verfügt über ein zweistelligen Kosten Parameter und immer eine Salzlänge von 22 (wenn eine kürzeren Salz gegeben wird, ist es mit $ s gepolstert ist):

60 :: 4 (`$2y$`) + 3 (cost `$`) + 22 (salt) + 1 (`$`) + 53 (hash) 

Für die Blowfish Krypta Hash-Algorithmus (bcrypt, OpenBSD Blowfish; Hashcat-Modus 3200) gibt es eine feste Länge von 60 dann.

Wie Sie sehen, hängt die Ausgabelänge vom verwendeten Hash-Algorithmus ab. Die Länge des Salzes und sogar einige Hash-spezifische Parameter wie kosten.

Wenn Sie zum Beispiel opt von SHA512 mit 999 999 999 Runden und ein 16 Byte langen Salz, die Ausgangslänge:

123 :: 3 (`$6$`) + 17 (`rounds=999999999$`) + 16 (salt) + 1 (`$`) + 86 (hash) 

Dieses Beispiel ein wenig extrem ist vielleicht, nur das Bild zu zeigen.


Andere crypt Fragen:

+1

@Gumbo: Ich hoffe es ist. –

+0

@Gumbo Was ist falsch an dieser Antwort? – Baba

+1

Ich würde ein wenig mehr Erklärung erwarten. Zum Beispiel, wie die zurückgegebene Zeichenfolge erstellt wird und wie sich die Eingabe auf die Ausgabe auswirkt. – Gumbo

0

Gibt die Hash-Zeichenfolge oder eine Zeichenfolge, die kürzer als 13 ist Zeichen und unterscheidet sich garantiert vom Salz bei Ausfall.

crypt() gibt eine Hash-Zeichenfolge mit dem Standard-Unix-DES-basierten -Algorithmus oder alternativen Algorithmen zurück, die möglicherweise auf dem -System verfügbar sind.

Einige Betriebssysteme unterstützen mehr als einen Hash-Typ. In der Tat wird manchmal der Standard DES-basierte Algorithmus durch einen MD5-basierten Algorithmus ersetzt. Der Hash-Typ wird durch das Argument salt ausgelöst. Vor 5.3, PHP würde die verfügbaren Algorithmen zum Zeitpunkt der Installation basierend auf dem System crypt() bestimmen. Wenn kein Salz zur Verfügung gestellt wird, generiert PHP automatisch entweder ein Standard-Zwei-Zeichen (DES) -Salz oder ein zwölf -Zeichen (MD5), abhängig von der Verfügbarkeit von MD5 crypt(). PHP legt eine Konstante namens CRYPT_SALT_LENGTH fest, die das längste zulässige Salz angibt, das von den verfügbaren Hashes zulässig ist.

mehr lesen: http://php.net/crypt

0

Wie Sie im documentation, die '' 'crypt()' '' Funktion verwendet wird, mit verschiedenen Hash-Algorithmen zu sehen. Die Länge kann also unterschiedlich sein und hängt vom Standard-Hashing-Algorithmus ab, der durch die in der Dokumentation beschriebenen Konstanten bestimmt werden kann.

0

crypt() stützt sich auf die verfügbaren Verschlüsselungsmethoden. Die am häufigsten verwendete Methode für PHP ist MD5, die immer 32 Zeichen zurückgibt. Andere Methoden wie DES und Blowfish geben Strings mit variabler Länge zurück.

Sie müssen wissen, welche Methode die Funktion crypt() in Ihrem Server verwendet.