2014-02-11 17 views
7
$pass="test" 

die obige Variable enthält ein Passwort genannt test.I dieses Passwort mit sha512 md5 und Salz Hash will, wie ich tue, dass als ive nur benifits gefunden Salz und sha512, weiß ich allready md5 encryption.please ich die Lösung benötigen, wie mein Systemwie sha implementieren 512, md5 und Salz-Verschlüsselung für alle ein Passwort

und bitte erklären sie es mit einem Codebeispiel vunerable ist, weil im zu md5 angebracht noch


von dem, was ive verstanden durch deine Kommentare und Antworten habe ich den folgenden Code erhalten:

$pass="test"; 
$hashed_pass= openssl_digest($pass, 'sha512'); 

ok scheint solide genug aber was ist [salt = '']? generiert es eine zufällige Salz Zeichenfolge oder etwas, wenn ja, wie es zu implementieren?

+0

Hash, –

+1

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 –

+0

. 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

Antwort

15

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 */ 
+0

bitte nicht so fortschrittlich codieren ein wenig weniger verwirrend –

+6

@Yasin Nun, ich * könnte * dir ein einfaches kleines Schnipsel geben, das MD5, SHA und ein Salz miteinander verbindet am Ende mit einem Hash, der trivial zu knacken ist. * ODER * Du kannst dich auf die PHP-Dokumentation beziehen, die Funktionen nachschlagen, die du nicht verstehst, lernen, wie sie zusammenarbeiten, um Passwörter einigermaßen sicher zu hashen, und im Spiel weiterkommen. – Sammitch

+0

Hi @Sammitch, ich habe eine Frage bezüglich der crypt() - Funktion von PHP. Wenn wir diese Methode verwenden, um ein Login-System zu implementieren, werden die $ 5 $ rounds = 10000 $ + salt in der Datenbank gespeichert ? Wenn ein Hacker die Datenbank kompromittiert, weiß er nun, wie oft das Passwort gehackt wurde, mit welcher Art von Hash sowie mit dem Salz. Ihre Arbeit ist für sie zugeschnitten? Alles, was noch zu tun ist, ist, es mit einer rohen Gewalt zu treffen, die genau wie jede andere Art von Hash ist, wenn jemand versucht, es zu knacken, nicht wahr? – Winter

4

Wenn Sie PHP verwenden> = 5.3, sollte die Funktion openssl_digest den Trick:

echo openssl_digest($pass, 'sha512'); 
// result 
ee26b0dd4af7e749aa1a8ee3c10ae9923f618980772e473f8819a5d4940e0db27ac185f8a0e1d5f84f88bc887fd67b143732c304cc5fa9ad8e6f57f50028a8ff 

echo md5($pass); 
// result 
098f6bcd4621d373cade4e832627b4f6 

Und mit PHP 5.1 oder 5.2 haben Sie die Hash-Funktion:

echo hash('sha512', $pass); 
// result 
ee26b0dd4af7e749aa1a8ee3c10ae9923f618980772e473f8819a5d4940e0db27ac185f8a0e1d5f84f88bc887fd67b143732c304cc5fa9ad8e6f57f50028a8ff 

echo md5($pass); 
098f6bcd4621d373cade4e832627b4f6 
+0

Ich brauche sha512, Salz, MD5 Hashing alle zusammen –

+0

und bitte erklären Sie mir den Prozess der Generierung einer zufälligen Salz und Hashing das Passwort mit ihm –

+0

Um das "Ergebnis" in dieser Antwort zu klären ...Er verwendete die ursprüngliche Zeichenfolge aus dem OP: "Test", um seinen Hash-Code beginnend mit ee26b0 zu erhalten. Also füge oben '$ pass =' ​​test 'hinzu; ' – degenerate