Frage zu Password_Hash (COST) + kleines Problem(Hilfe)

11/03/2015 22:38 Bently.#1
Guten Tag,

ich bin auf einem Therad gestoßen über Password_hash. Da sah ich das einer COST benutze ungefähr so. Beispiel:

$pw = "mypassword";
$pepper = "mypepper";
define('COST',13);

$hash = password_hash($password.$pepper, PASSWORD_DEFAULT,array('cost'=>COST));

Jetzt ist meine Frage, was macht dieses COST?

2. Problem
Habe ein kurzes Script geschrieben um ein Datensatz einzufügen (halt nur zum Testzweck). Alles soweit in Ordnung jedoch, wenn ich dieses Zeichen einfüge µ steht da Datensatz erfolgreich abgesendet obwohl ich die kürze des Password begrenzt habe auf 6 Zeichen. Falls ich irgendein Text eingebe das kürzer als 6 Zeichen ist, steht da Password darf nicht kürzer als 6 Zeichen stehen ( so soll es auch sein).


mfg

PS: Falls ihr Verbesserungsvorschläge findet, bitte dies schreiben. Bin dankbar über jede Hilfe!
11/03/2015 23:04 ComputerBaer#2
Ich kann beide Fragen nicht perfekt beantworten, aber ich glaube auf beide Fragen eine richtige Antwort zu haben.

Das "cost" legt grob gesagt fest, wie oft das Passwort gehasht werden soll. Wenn du also den maximal Wert (31) verwendest, dann wird es länger dauern als beim minimal Wert (4). Wie deutlich sich das bei einem Passwort zeigt müsstest du testen, wenn jemand versucht das Passwort zu knacken wird er es aber definitiv zu spüren bekommen.
Und ich glaube dein Pfeffer ist unnötig, die password_hash Funktion sollte das Passwort schon gut salzen.

Das ist jetzt geraten, könntest du aber leicht testen wenn die die länger auf mindestens 7 setzt. Ich vermute, dass PHP bei dem µ-Zeichen die "lange Darstellung" (Mir will das richtige Wort nicht einfallen, vielleicht "Unicode Escape Sequence" ?) des Zeichens zählt, das wären nämlich genau 6 Zeichen "\u00B5". Eventuell ist es auch ein anderer wirrer Zeichensalat, der durch eine falsche Kodierung entstanden ist. Die Lösung kann ich jetzt leider nicht liefern.
11/03/2015 23:31 Bently.#3
Diese Beschreibung oder Hilfe du die geschrieben hast reicht vollkommen aus und ich habe es auch jetzt verstanden und danke dir. Eine Frage hätte ich da noch. Ich habe ja jetzt COST definiert das er 13 mal gehasht werden soll. Wird es automatisch gemacht mit meinem Code ?:

define('COST',13);

$hash = password_hash($password.$pepper, PASSWORD_DEFAULT,array('cost'=>COST));
11/04/2015 09:30 Devsome#4
Quote:
Originally Posted by Bently. View Post
Diese Beschreibung oder Hilfe du die geschrieben hast reicht vollkommen aus und ich habe es auch jetzt verstanden und danke dir. Eine Frage hätte ich da noch. Ich habe ja jetzt COST definiert das er 13 mal gehasht werden soll. Wird es automatisch gemacht mit meinem Code ?:

define('COST',13);

$hash = password_hash($password.$pepper, PASSWORD_DEFAULT,array('cost'=>COST));
Ja wird er.

Hier nochmal ein bsp. von der php.net Seite.

Code:
/**
 * Note that the salt here is randomly generated.
 * Never use a static salt or one that is not randomly generated.
 *
 * For the VAST majority of use-cases, let password_hash generate the salt randomly for you
 */
$options = [
    'cost' => 11,
    'salt' => mcrypt_create_iv(22, MCRYPT_DEV_URANDOM),
];
echo password_hash("rasmuslerdorf", PASSWORD_BCRYPT, $options)."\n";
Quelle: [Only registered and activated users can see links. Click Here To Register...]

"rasmuslerdorf" => Passwort
"PASSWORD_BCRYPT" => Die Art wie verschlüsselt wird (CRYPT_BLOWFISH-Algorithmus)
"$options" => Die obigen variablen cost & salt