Generieren von Passwort-Hash In PHP 5.5 Und Einstellung-Cost-Option
Ich weiß, PHP 5.5 ist in der alpha, aber diese Klasse mache ich gerade, im Voraus zu nutzen, es ist hashing-Funktion mit function_exists().
Ich überprüfte die password_hash
Dokumentation. Das 3. argument ist für $options, die unterstützt derzeit zwei Optionen, 'salt' und 'Kosten'.
Es besagt Folgendes:
Kosten, bezeichnet die Algorithmische Kosten verwendet werden soll. Beispiele
diese Werte können sein gefunden auf die crypt () - Seite.
Wenn ich auf die crypt () - Seite der Dokumentation es gibt, ist:
Blowfish-Hash mit einem salt wie folgt: "$2a$", "$2x$" oder "$2y$", eine
zweistellige Kosten-parameter, "$", und 22 Ziffern aus dem alphabet
"./0-9A-Za-z". Mit Zeichen, die außerhalb dieses Bereichs in das Salz wird
Ursache crypt() für die Rückgabe einer Zeichenfolge der Länge null. Die zwei-stellige Kosten
parameter ist die Basis-2-Logarithmus der iterationsanzahl für die
zugrunde liegenden Blowfish-based hashing algorithmeter und müssen in Reichweite sein
04-31, Werte außerhalb dieses Bereichs verursachen crypt() fehl. Versionen
PHP vor 5.3.7 unterstützt nur "$2a$" als Salz-Präfix: PHP 5.3.7
eingeführt wird der neue Präfixe zu beheben, eine Sicherheitslücke in der Blowfish
Umsetzung. Bitte beziehen Sie sich auf » dieses Dokument für vollständige details
die Sicherheits-fix, aber um es zusammenzufassen, nur PHP-Entwickler, die für
5.3.7 und höher sollten mit "$2y$" bevorzugt "$2a$".
Ich kann nicht scheinen, um meinen Kopf gewickelt, um dieses. Es sagt PHP 5.3.7 und höher verwenden soll $2y$, aber was Kosten Wert verwende ich, um zu erhalten, dass eine und ist es den besten Wert zu wählen? Das Beispiel, das Sie bieten, nutzt einen Wert von 7, aber nach oben kann es gehen: bis zu 31, welchen Unterschied macht es, zu verwenden, sagen wir 4 im Gegensatz zu sagen, 31?
- Bis Sie einen Grund finden, um etwas zu wählen, eine andere als die default-Werte, (wie wenn Sie die Standardeinstellungen sind nachweislich schwach), warum nicht wählen Sie einfach die Standardwerte, und fahren Sie auf die nächste Ausgabe? In meiner Erfahrung, die PHP default-Werte für alles, haben sehr viel besser geworden seit PHP 5.3. Nur ein Gedanke, ~Ray
- wahr. Jedoch, die noch nicht vergossen Licht auf, wie und warum Sie verschiedene Kosten-Werte. Die PHP Standard-mag sicher sein, aber mindestens für die eventuell performance-Gründen. So kann je nach Produktion Umwelt-und Sicherheitspolitik erfordert es möglicherweise etwas stärker. Nur meine Gedanken. =o)
- Siehe auch Openwall ist Portable PHP password hashing framework (PHPass). Seine gehärtete gegen eine Reihe von gemeinsamen Angriffe auf Benutzer-Passwörter. Und er schätzt die Kosten auf der Basis des gewählten hash (aber ich bin mir nicht sicher, ob die option ausgesetzt ist).
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die Funktion
password_hash()
ist nur ein wrapper um die Funktioncrypt()
, und macht es einfacher, es richtig zu verwenden. Es kümmert sich um die Generierung von sicheren zufällige Salz, und bietet eine gute default-Werte.Der einfachste Weg, um diese Funktion zu nutzen wird:
Das bedeutet, dass die Funktion hash das Passwort mit BCrypt (Algorithmus
2y
), generiert ein zufälliges salt, und verwendet die Standard-Kosten (im moment 10). Dies sind gute Standardwerte, insbesondere würde ich nicht generieren, das Salz von Ihrer eigenen, ist es leicht, Fehler zu machen gibt.Sollten Sie ändern möchten die Kosten-parameter, kann man das so machen, dass:
Erhöhung der Kosten-parameter um 1, verdoppelt die benötigte Zeit, um den Hashwert zu berechnen. Die Kosten-parameter ist der Logarithmus (zur Basis 2) der iteration count, das bedeutet:
Edit:
Ich verpasste den Punkt, dass Sie wollen, die Erstellung Ihrer eigenen Klasse. Für die PHP-version 5.3.7 oder höher, es existiert ein compatibility pack, vom gleichen Autor, der die
password_hash()
Funktion. Sie können entweder diesen code direkt oder Blick auf die gut gestaltete Umsetzung. Für PHP vor Version 5.3.7 gibt es keine Unterstützung fürcrypt
mit2y
, die unicode aware BCrypt-Algorithmus. Sie können stattdessen2a
, das ist die beste alternative für frühere PHP-Versionen. Ich habe eine Beispiel mit eine Menge Kommentare, möchten Sie vielleicht einen Blick auf Sie zu.P. S. Die Ausdrücke "Salz" und "Kostenfaktor" sind, richtig eingesetzt, in
password_hash()
, die crypt () - Funktion, verwendet das Wort Salz für alle crypt-Parameter zusammen, das ist ein bisschen irreführend.Disclaimer: dies ist mit PHP 5.3.10, aber es scheint nicht wirklich anders als deine Beschreibung.
Den Kosten gilt für die Kosten der Berechnung. Wenn Sie erhöhen die Kosten Wert, dauert es länger, bis das Kennwort gehasht
Wenn ich diese auf meinem (alten) Rechner als
gibt es sofort (~0,2 sec), in der Erwägung, dass mit
dauert es etwa 5,2 Sekunden.
cost
Wert hat in Bezug auf die Erhöhung der Sicherheit und/oder Unannehmlichkeiten. cheers.