Ich kann das Passwort nicht mit meiner Datenbank und der eingegebenen vergleichen

7

Ich verwende php crypt function, um ein Passwort sicher zu machen, aber wenn ich versuche, ein eingegebenes Passwort mit einem Passwort in der Datenbank zu vergleichen, funktioniert es nicht.

hier ist mein Code, um das Passwort an erster Stelle zu erstellen:

%Vor%

hier versuche ich mit dem Passwort in einer anderen Funktion zu vergleichen:

%Vor%

Dies funktioniert nicht.

Wenn ich beide Passwörter ausdrücke, sind die verschieden.

Warum sind die Passwörter unterschiedlich, obwohl ich das gleiche Passwort eingabe und die crypt-Funktion für beide verwende?

kann mir jemand in die richtige Richtung zeigen?

    
smith_05_bird 14.12.2016, 11:15
quelle

6 Antworten

1

Ich weiß nicht, was ich sagen soll, das wird mehr Details hinzufügen als das, was alle anderen bereits gesagt haben ...

In heutigen Hash / Unhashing-Algorithmen wäre es daher unsicher, Kennwörter mit Standard-Hashfunktionen (z. B. MD5 / SHA256) zu speichern, da diese Art von Eingabe schnell und einfach aufgehoben werden kann.

password_hash() , wie in anderen Antworten und Kommentaren angegeben, sollten Sie # 1 Weg sein, Passwörter sicher zu speichern, da es einen Einweg-Hashalgorithmus verwendet.

Sie sollten diese Seite lesen!

Und dann als Antwort auf Ihre ursprüngliche Frage, verwenden Sie hash_equals() -Funktion, um Passwörter zu vergleichen.

    
drew 21.12.2016, 15:46
quelle
13

Von den Dokumenten

  

Beispiel # 1 crypt () Beispiele

%Vor%

Der Code in der Frage erzeugt bei jedem Aufruf effektiv einen neuen Hash - der vorhandene Passwort-Hash muss als Salz übergeben werden, um ein konsistentes Ergebnis zu erhalten.

Wie auch in der Dokumentation erwähnt:

  

Die Verwendung von password_hash () wird empfohlen .

Ich würde weiter gehen und sagen, dass Sie definitiv password_hash verwenden sollten, anstatt crypt für die Passwortverwendung aufzurufen (vorausgesetzt, php & gt; = 5.5); in jedem Fall aber für welche Tools / Methoden Sie auch immer verwenden - bitte lesen Sie die Dokumentation, um zu wissen, wie man sie benutzt.

    
AD7six 14.12.2016 11:22
quelle
6

Verwenden Sie crypt nicht direkt für Passwörter.

Wenn Sie PHP 5.5+ haben, dann verwenden Sie die eingebaute Funktion password_hash , Wenn Sie PHP 5.3.7+ verwenden, verwenden Sie andernfalls das Polyfill für diese Funktion.

    
Ron Dadon 14.12.2016 11:22
quelle
2

Versuchen Sie etwas wie das.

%Vor%

Hier salt -Parameter, um das Hashing zu aktivieren. Wenn nicht angegeben, wird das Verhalten durch die Implementierung des Algorithmus definiert und kann zu unerwarteten Ergebnissen führen.

    
Pravin Vavadiya 26.12.2016 09:39
quelle
0

Wie viele Leute hier sagten, sollten Sie password_hash PHP-Funktion verwenden.

Hier sehen Sie ein einfaches Beispiel, wie Sie es verwenden können:

%Vor%

Wenn Sie eine ältere Version von PHP verwenden, können Sie, wie bereits erwähnt, polyfill installieren.

    
Anton Serdyuk 28.12.2016 10:37
quelle
0

Haben Sie die Eingabe vor dem Speichern in db und während des Vergleichs getrimmt? Da die Eingabe vom Browser kommt, kann dies ein Grund sein, warum sie nicht übereinstimmt. Andernfalls scheint Ссылка angemessen zu sein.

    
user29 28.12.2016 13:43
quelle

Tags und Links