Fragen zur PHP-Registrierung und Passwortgenerierung

WBOY
Freigeben: 2016-09-05 08:59:53
Original
1529 Leute haben es durchsucht

Warum fügen Sie beim Erstellen einer Benutzertabelle normalerweise ein Salt-Feld hinzu und führen dann bei der Berechnung des Passworts die MD5-Verschlüsselung basierend auf dem auf der Registrierungsseite eingegebenen Passwort und dem zufällig generierten Salt-Wert durch? Das? Meister Geben Sie eine detaillierte Erklärung.

Antwortinhalt:

Warum fügen Sie beim Erstellen einer Benutzertabelle normalerweise ein Salt-Feld hinzu und führen dann bei der Berechnung des Passworts die MD5-Verschlüsselung basierend auf dem auf der Registrierungsseite eingegebenen Passwort und dem zufällig generierten Salt-Wert durch? Das? Meister Geben Sie eine detaillierte Erklärung.

Schwache Passwörter, die mit MD5 verschlüsselt wurden, können immer noch durch Brute Force oder Rainbow Tables geknackt werden. Der Zweck des Hinzufügens von Salt besteht darin, die Schwierigkeit des MD5-Knackens zu erhöhen und dadurch die Sicherheit zu verbessern.

Hauptsächlich, um zu vermeiden, dass nach dem Diebstahl der Datenbank direkt der Klartext des Passworts des Benutzers abgerufen wird.

PHP-Passwort-Hash-Sicherheit
Passwort-Hash-bezogene Funktionen:
password_hash (empfohlen) crypt(blowfish) hash sha1 md5
Die Hash-Funktion unterstützt mehrere Hashing-Algorithmen hash_algos, wie z. B. sha512.

PHP 5.5 hat eine native Passwort-Hashing-API (password_hash/password_verify) bereitgestellt.
Es bietet eine sichere Möglichkeit, das Passwort-Hashing und die Überprüfung abzuschließen.
In PHP 5.3.7 und nachfolgenden Versionen bereitgestellt. Eine Kompatibilitätsbibliothek für Pure PHPs native Passwort-Hashing-API.
Wenn die PHP-Version „password_hash/password_verify“ nicht unterstützt, verwenden Sie stattdessen die Crypt-Implementierung.
Wenn Sie die Funktion „crypt()“ zur Passwortüberprüfung verwenden, müssen Sie eine konstante Zeit wählen String-Vergleichsalgorithmus zur Vermeidung von Timing-Angriffen.
Konstant zeitaufwändig bedeutet, dass die vom String-Vergleich verbrauchte Zeit konstant ist und sich nicht mit der Menge der Eingabedaten ändert Die
-Funktion ist ein ständiger String-Vergleich, ==, aber === kann die Arbeit für Sie erledigen. strcmp() Daher empfehlen wir Ihnen, nach Möglichkeit native Passwort-Hashes zu verwenden.
password_verify()Das „Salz“ im Bereich der Verschlüsselung und Entschlüsselung bezieht sich auf einige Daten, die während des Hashing-Prozesses hinzugefügt werden.
Es wird verwendet, um das Risiko eines Vergleichs in der Hash-Wert-Tabelle zu vermeiden die Ausgabedaten, um das Klartext-Passwort zu erhalten.

Einfach ausgedrückt ist „Salt“ eine kleine Datenmenge, die hinzugefügt wird, um das Knacken des Hash-Werts zu erschweren.

Es gibt viele Online-Dienste, die berechnete A bereitstellen können Liste der Hash-Werte und ihrer entsprechenden Originaleingaben, und die Datenmenge ist extrem groß.
Durch Hinzufügen von „Salz“ können Sie das Risiko vermeiden, den entsprechenden Klartext direkt aus der Liste zu finden.
Regenbogentabellen werden zur Verschlüsselung verwendet. Eine vorberechnete Tabelle mit inversen Hash-Funktionen, die häufig zum Knacken verschlüsselter Passwort-Hashes verwendet wird.

Die Funktion „password_hash()“ generiert zufällig ein „Salt“.
Bei Verwendung der Funktion „password_hash()“ oder „crypt()“ wird das „Salt“ als Teil des generierten Hash-Werts zurückgegeben.

Sie kann den vollständigen Rückgabewert direkt in der Datenbank speichern, da dieser Rückgabewert bereits genügend Informationen enthält

Kann direkt in der Funktion „password_verify()“ oder „crypt()“ zur Passwortüberprüfung verwendet werden
Eine weitere Verwendung von Salt besteht darin, dass damit Cookies zur Identifizierung von Benutzern erstellt werden können.
Beispielsweise die Implementierung eines benutzerdefinierten Cookie-Sitzungsmechanismus basierend auf der Datenbank:
Dieses Cookie muss nicht nur den Benutzer authentifizieren, sondern auch Außerdem kann es nicht gefälscht oder geknackt werden.



Verwenden Sie bcrypt. PHP 5.5.0 verfügt über den Standardalgorithmus.

Wie kann ich MD5 zurückgeben?
<code>//保护用户密码的盐
$salt = sha1( uniqid(getmypid().'_'.mt_rand().'_', true) );

//数据库保存的用户密码($pwd_user是用户输入的密码明文)
$pwd_db = sha1($salt.sha1($pwd_user));

//cookie里的盐
//其中$global_salt是配置里定义的全局盐,用来保护用户的盐,一旦修改,所有用户的cookie都将失效.
$cookie_salt = sha1($global_salt.sha1($salt));

//最终生成的cookie内容
$cookie = base64_encode($user_id.'|'.$cookie_salt);
//如果你需要高安全性,还可以使用MCRYPT_BLOWFISH对整个cookie的内容做一次加密.
$cookie = mcrypt_blowfish($cookie, $key);

//设置cookie,这里把过期时间设为604800秒(60*60*24*7,一周)
setcookie('sessid', $cookie, time()+604800, '/', '', false, true);

//解密cookie
$cookie = mdecrypt_blowfish($_COOKIE['sessid'], $key);

//解码分割后拿到里面的$user_id和$cookie_salt
$cookie = explode('|', base64_decode($_COOKIE['sessid']));
list($user_id, $cookie_salt) = $cookie;</code>
Nach dem Login kopieren

http://zhuanlan.zhihu.com/p/2...

Verwandte Etiketten:
php
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage