bearbeiten : Da diese Antwort scheint immer noch ein wenig Interesse zu generieren, lassen Sie mich Sie alle in Richtung password_hash()
, die im Wesentlichen ein Wrapper um crypt()
ist aber viel einfacher zu bedienen. Wenn Sie PHP < 5.5 verwenden, gibt es password_compat, das vom gleichen Typ geschrieben wurde und tatsächlich von der offiziellen Dokumentation verbunden ist.
Wenn Sie bereits crypt()
Verwendung ist es wert darauf hingewiesen, dass sowohl password_verify()
und password_needs_rehash()
mit allen crypt()
-Stil Passwörter funktionieren wird, so gibt es kaum einen Grund, nicht zu aktualisieren!
Verwenden crypt()
bietet es viel stärker Hashing-Methoden.
Hash ein neues Passwort:
// generate a 16-character salt string
$salt = substr(str_replace('+','.',base64_encode(md5(mt_rand(), true))),0,16);
// how many times the string will be hashed
$rounds = 10000;
// pass in the password, the number of rounds, and the salt
// $5$ specifies SHA256-CRYPT, use $6$ if you really want SHA512
echo crypt('password123', sprintf('$5$rounds=%d$%s$', $rounds, $salt));
// output: $5$rounds=10000$3ES3C7XZpT7WQIuC$BEKSvZv./Y3b4ZyWLqq4BfIJzVHQweHqGBukFmo5MI8
ein bestehendes Passwort vergleichen:
// the hash stored for the user
$given_hash = '$5$rounds=10000$3ES3C7XZpT7WQIuC$BEKSvZv./Y3b4ZyWLqq4BfIJzVHQweHqGBukFmo5MI8';
$test_pw = 'password123';
// extract the hashing method, number of rounds, and salt from the stored hash
// and hash the password string accordingly
$parts = explode('$', $given_hash);
$test_hash = crypt($test_pw, sprintf('$%s$%s$%s$', $parts[1], $parts[2], $parts[3]));
// compare
echo $given_hash . "\n" . $test_hash . "\n" . var_export($given_hash === $test_hash, true);
/* output:
$5$rounds=10000$3ES3C7XZpT7WQIuC$BEKSvZv./Y3b4ZyWLqq4BfIJzVHQweHqGBukFmo5MI8
$5$rounds=10000$3ES3C7XZpT7WQIuC$BEKSvZv./Y3b4ZyWLqq4BfIJzVHQweHqGBukFmo5MI8
true */
Hash, –
nicht verschlüsselt Warum nicht mit dem [Password_ *] (http://www.php.net /manual/en/ref.password.php) Funktionen, die jetzt in PHP selbst integriert sind, oder die [userland-Implementierung] (https://github.com/ircmaxell/password_compat) dieser Funktionen, wenn Sie noch nicht auf PHP5.5 sind und die Codebeispiele dafür finden Sie in den PHP-Dokumentseiten –
. Siehe auch Openwalls [PHP Passwort Hashing Framewo rk] (http://www.openwall.com/phpass/) (PHPass). Es ist portabel und gegen eine Reihe häufiger Angriffe auf Benutzerkennwörter abgesichert. Der Typ, der das Framework (SolarDesigner) geschrieben hat, ist derselbe Typ, der [John The Ripper] geschrieben hat (http://www.openwall.com/john/) und als Richter am [Password Hashing Competition] teilnimmt (http://password-hashing.net/). Er weiß also etwas über Angriffe auf Passwörter. – jww