Was ist die beste Alternative zum Md5-Algorithmus für PHP zur Verschlüsselung von Benutzerdaten wie Passwörtern und anderen sicheren Daten, die in MySQL-Datenbanken gespeichert sind?
SHA512 ist keine schreckliche Wahl. Aber es wird nicht lange dauern, bis es für die meisten Passwörter geknackt wird. Nehmen Sie Jeffs Rat . Verwenden Sie bcrypt oder PBKDF2 . Sie sind resistent gegen EC2 oder andere parallele Verarbeitungstechniken. Wahrscheinlich nicht immun, aber resistent.
Der Grund, dass ein besserer Hash in diesem Fall nicht besser ist, ist ABC
in MD5 wird zu einem Wert und ABC
in SHA512 wird zu einem Wert. Die Berechnung aller 3-Buchstaben-Passwörter ist für SHA512 tatsächlich einfacher als für MD5 . Der Schlüssel ist schwer zu tun. Das bedeutet einen langsamen Hash, einen, der viel RAM verwendet, und / oder einen, der auf EC2 nicht einfach ausgeführt werden kann.
Die beste Wahl ist, KEINE Passwörter mehr zu benutzen. Entscheiden Sie, ob ein Login wirklich für Ihre Site benötigt wird, und wenn dies der Fall ist, versuchen Sie zuerst, einen Drittanbieter zu verwenden. Wenn das keine Option ist, denken Sie an ein Passwort + Token von RSA. Verwenden Sie nur ein Passwort, wenn Sie keine anderen realisierbaren Optionen haben.
Beim Hashing eines Passworts lautet der Schlüssel hash (password + salt) und das Salz muss für jeden Benutzer eindeutig sein und sollte auch schwierig oder unmöglich zu erraten sein. Die Verwendung des Benutzernamens erfüllt die ersten Kriterien und ist besser als kein Salz oder dasselbe Salz für jeden Benutzer, , aber eine eindeutige zufällige Salzmenge für jeden Benutzer ist eine bessere Wahl . Idealerweise in einer separaten Datenbank, wenn nicht in einem Speicherort, mit eigenen Anmeldeinformationen. Es sollte auch nicht auf den Benutzernamen, sondern auf die user_id oder sogar einen Hash der user_id getastet werden. Sie möchten, dass diese Datenbank SQL Injection Proof ist. Es ist ein guter Weg dies zu tun, wenn keine Eingabe vom Benutzer akzeptiert wird, die nicht gehashed ist. Und Sie wären klug, die Abfrage selbst das Hashing durchführen zu lassen. Langsam? Ja, und das ist auch eine gute Sache.
Das Salz selbst sollte alle schwer vorhersehbaren Daten enthalten, die es erhalten kann. Benutzername + User ID + Timestamp + Müll von dev / urandom + der letzte Tweet mit dem Wort Taco drin. Länger desto besser. SHA512 ist hier eine gute Wahl für Hash.
Zusammenfassung: hash = bcrypt (Passwort + Salz), Salz = sha512 (Benutzername + Benutzer-ID + Zeitstempel + Mikrotimestamp + Dev / Urand Bits + anderes Rauschen).
Wenn Sie nach all dem noch immer Sorgen haben. Fühlen Sie sich frei zu SHA512 das verschlüsselte Passwort. Sie werden die Stärke von SHA512 erhalten, die, wenn sie geknackt wird, nur einen wesentlich härteren Brute-Force-verschlüsselten Hash erkennen lässt.
MD5 wird in der Tat nicht mehr empfohlen. Die meisten PHP-Installationen enthalten die Erweiterung hash
. Die beste Wahl für eine Hash-Funktion wäre derzeit SHA-512. Sie können SHA-512 mit der folgenden Funktion verwenden:
Es gibt andere Alternativen mit kleineren Ausgabegrößen, wie zB SHA-256
oder RIPEMD-160
.
Update: Lesen Sie Ihre aktualisierte Frage, ich empfehle die PHP crypt Funktion.
Tags und Links php security encryption md5