Heim > Artikel > Backend-Entwicklung > Analyse des PHP-Benutzerkennwort-Verschlüsselungsalgorithmus [Discuz-Verschlüsselungsalgorithmus]
Das Beispiel in diesem Artikel beschreibt den Verschlüsselungsalgorithmus für PHP-Benutzerkennwörter. Ich teile es Ihnen als Referenz mit:
Als ich heute Discuz für die Sekundärentwicklung verwendete, musste ich den Discuz-Benutzernamen und das Passwort im Code überprüfen Ich bin in eine Falle geraten, weil das Discuz-Forum zwei Tabellen zum Speichern von Benutzerdaten hat. Eine befindet sich in pre_common_member in der Discuz-Datenbank ultrax und die andere ist in der Tabelle uc_members in der UCenter-Datenbank ucenter gespeichert. Ich habe viel Zeit damit verbracht, die pre_common_member-Daten in der Ultrax-Bibliothek zu studieren und zu untersuchen, wie ihr Passwort generiert wurde. Als Ergebnis habe ich im Internet gesucht und einen Salt gefunden, der angeblich zufällig generiert wurde
Ich dachte es wurde zufällig generiert. Wie wird Salt beim Anmelden überprüft? Dann hieß es online, dass Discuz dieses Passwort überhaupt nicht verwendet habe, und tatsächlich konnte ich mich auch dann normal anmelden, wenn ich das Benutzerpasswort in pre_common_member änderte. Es schien, dass dieses Passwort nutzlos war überhaupt, was dazu führte, dass ich einen großen Umweg machte.
Okay, kommen wir zum Punkt. Der Passwortverschlüsselungsalgorithmus von Discuz besteht eigentlich aus zwei MD5-Verschlüsselungen. Zuerst einmal mit Klartext verschlüsseln, dann zufällig einen Salt generieren und dann Salt nach dem ersten Chiffriertext als Klartext hinzufügen . Führen Sie die MD5-Verschlüsselung erneut durch. Der Salt wird in der Tabelle uc_members gespeichert und kann über den Benutzernamen abgerufen werden.
So:
MD5(MD5(plaintext)+salt)
Das Folgende ist der Implementierungscode von .net:
string GetDiscuzPWString(string sourceStr, string salt) { return GetMd5Hash(string.Concat(GetMd5Hash(sourceStr),salt)); } string GetMd5Hash(string input) { MD5 md5Hasher = MD5.Create(); byte[] data = md5Hasher.ComputeHash(Encoding.Default.GetBytes(input)); StringBuilder sBuilder = new StringBuilder(); for (int i = 0; i < data.Length; i++) { sBuilder.Append(data[i].ToString("x2")); } return sBuilder.ToString(); }
Zusammenfassung Methode zur Passwortbeurteilung:
① So installieren Sie UC
② Öffnen Sie die Datenbank und suchen Sie die Tabelle uc_members, suchen Sie nach dem letzten Feld „salt“ und kopieren Sie den Wert hinein
③ Pseudocode:
$s=md5(md5("密码")."salt字段的值"); echo $s;
④ Verwenden Sie IF zur Beurteilung
⑤ Sagen Sie es noch einmal! Diese Zufallszahl besteht aus 6 Ziffern!
Ich hoffe, dass dieser Artikel für alle, die sich mit PHP-Programmierung befassen, hilfreich sein wird.
Weitere Artikel zur Analyse des PHP-Benutzerpasswort-Verschlüsselungsalgorithmus [Discuz-Verschlüsselungsalgorithmus] finden Sie auf der chinesischen PHP-Website!