2013-06-20 10 views
9

ist die Dokumentation über eine neue password_hash Funktion für PHP Lesen 5.5, ich frage mich, was ist der Standard-Algorithmus:Was ist der Standard-Algorithmus in password_hash

password_hash("rasmuslerdorf", PASSWORD_DEFAULT); 

Dokumentation darüber die das nicht klären: http://www.php.net/manual/en/password.constants.php

+1

sieht aus wie einige interne Hash. – DevZer0

+0

Betrachtet man die Dokumentation für http://us2.php.net/password_hash, sieht es wie BCrypt aus. Sie verweisen auf die Eingabe und die Ausgabe ähnelt der Ausgabe von BCrypt, aber ich kann nicht sicher sagen. –

+0

Dies kann sich in neueren PHP-Versionen ändern, wenn neuere, stärkere Hashing-Algorithmen unterstützt werden. – hjpotter92

Antwort

8

Dies wurde in der Dokumentation unter password_hash() aktualisiert und wird in Kürze auf der Konstantenseite aktualisiert (Ich habe gerade die Dokumentation Änderung vor etwa einer Stunde begangen).

Dies wird in der Live heute password.constants

Von der aktualisierten Konstanten Seite (die noch nicht leben gegangen ist, wird aber im Laufe des Tages sein):

Verfügbare Algorithmen:

  • PASSWORD_BCRYPT (integer)

    PASSWORD_BCRYPT wird verwendet, um c Erzeuge neue Passwort-Hashes mit dem CRYPT_BLOWFISH Algorithmus.

    Dies führt immer zu einem Hash mit dem Crypt-Format "$ 2y $", das immer 60 Zeichen breit ist.

    Unterstützte Optionen:

    • Salz - zur Verfügung zu stellen manuell ein Salz zu verwenden, wenn die Passwort-Hashing. Beachten Sie, dass dies überschreibt und verhindert, dass ein Salz automatisch generiert wird.

      Wenn nicht angegeben, wird von password_hash() ein zufälliges Salt für jedes Hash-Passwort generiert. Dies ist die beabsichtigte Betriebsart.

    • Kosten - was die algorithmischen Kosten bezeichnet, die verwendet werden sollten. Beispiele für diese Werte finden Sie auf der Seite crypt().

      Wenn nicht angegeben, wird der Standardwert 10 verwendet. Dies sind gute Grundkosten, aber Sie sollten in Erwägung ziehen, diese abhängig von Ihrer Hardware zu erhöhen.

  • PASSWORD_DEFAULT (integer)

    Der Standard-Algorithmus für Hashing, wenn kein Algorithmus vorgesehen ist, zu verwenden. Dies kann sich in neueren PHP-Versionen ändern, wenn neuere, stärkere Hashalgorithmen unterstützt werden.

    Es ist erwähnenswert, dass sich diese Konstante mit der Zeit ändern kann (und wahrscheinlich auch wird). Daher sollten Sie beachten, dass sich die Länge des resultierenden Hashes ändern kann. Wenn Sie PASSWORD_DEFAULT verwenden, sollten Sie daher den resultierenden Hash so speichern, dass mehr als 60 Zeichen gespeichert werden können (255 ist die empfohlene Breite).

    Werte für diese Konstante:

    • PHP 5.5.0 - PASSWORD_BCRYPT

Was, wann und wie PASSWORD_DEFAULT aktualisiert wird, das ist auf der password_hash() documentation page:

Hinweis: Updates zu unterstützte Algorithmen, die von dieser Funktion (oder Änderungen an den Standard eins) ist folgende Regeln zu beachten:

  • Jeder neuer Algorithmus in Kern für mindestens 1 vollständige PHP-Versionen vor immer sein muss Standard. Wenn zum Beispiel ein neuer Algorithmus in 5.5.5 hinzugefügt wird, wäre er erst ab 5.7 (da 5.6 wäre die erste vollständige Version) nicht voreingestellt. Wenn jedoch ein anderer Algorithmus in 5.6.0 hinzugefügt wurde, wäre er auch für den Standardwert 5.7.0 geeignet.

  • Der Standardwert sollte sich nur bei einer vollständigen Version (5.6.0, 6.0.0 usw.) und nicht bei einer Revision ändern. Die einzige Ausnahme besteht in einem Notfall, wenn eine kritische Sicherheitslücke im aktuellen Standard gefunden wird.

+0

aktualisierte Dokumentation bestätigt! hehe :) kann ich fragen ob du ein Mitglied des PHP Dev Teams bist? Oder wie konntest du das wissen? – hek2mgl

+0

@ hek2mgl: Ja, bin ich. Und [dieses besondere Feature] (https://wiki.php.net/rfc/password_hash) war mein Vorschlag und meine Implementierung. Ich bin also teilweise dafür verantwortlich, die Dokumentation auf dem neuesten Stand zu halten (und anderen mit der neuen Funktion zu helfen) ;-) – ircmaxell

9

Ich habe mir den PHP Quellcode angeschaut. In PHP5.5 wird standardmäßig bcrypt verwendet.

Von ext/standard/php_password.h line 31:

#define PHP_PASSWORD_DEFAULT PHP_PASSWORD_BCRYPT 
+0

ja das wars! einfach 'wget' die Quellen und' rgrep' ... Versuche das mit Closed Source! ;) – hek2mgl

+3

Oder benutze [lxr] (http://lxr.php.net), du kannst auch [this] sehen (http://blog.ircmaxell.com/2012/03/phps-source-code-for- php-developers.html) zum Verständnis des Quellcodes von PHP. – Paul

2

Die Dokumentation ist eigentlich ziemlich spezifisch, wenn auch ein wenig schlecht formuliert; Der Hashwert ist der stärkste Hashwert, den PHP zu der Zeit für verfügbar hält, und kann sich jederzeit ändern. Die Hashes, die von password_hash erzeugt werden, enthalten am Anfang ein Datenpaket, das anzeigt, welches ursprünglich für die Erstellung verwendet wurde. Solche Aktualisierungen können automatisch ausgeführt werden, sobald neue Hash-Algorithmen verfügbar sind, ohne bereits in einer Datenbank gespeicherte Hashes zu zerstören.

Da bcrypt der einzige Algorithmus zur Zeit definiert, können Sie wahrscheinlich zu annehmen, dass es der Standard ist, aber eine schnelle Möglichkeit, einen einfachen PHP-Skript, um zu überprüfen wäre zu machen, die die gleiche Zeichenfolge zweimal Hashes, einmal mit jeder Option, und mit einem fixiertes Salz und druckt die resultierenden Hashes; sie werden wahrscheinlich übereinstimmen.

Die ursprüngliche password_hash-Spezifikation kann auch hilfreich sein. https://wiki.php.net/rfc/password_hash