Passwort verschlüsselt speichern
Thomas
- php
Hallo.
Ich habe folgendes vor:
Gibt es irgendeine PHP-Funktion, mit der ich diese Verschlüsselung machen kann.
Hab grad crypt() getestet, aber wenn ich das selbe Wort mehrmals hintereinander mit crypt() verschlüsseln möchte, kommt jedes mal ein anderer verschlüsselter Wert raus?
Gibt es da eine geeignetere Funktion?
Vielen Dank vorab für die Hilfe,
Thomas
Hallo Thomas!
Gibt es da eine geeignetere Funktion?
Oftmals wird dafür md5() verwendet, obwohl es dafür eigentlich nicht
gedacht ist.
℆, ℒacℎgas
Oftmals wird dafür md5() verwendet, obwohl es dafür eigentlich nicht
gedacht ist.
Für was ist md5() dann gedacht?
Funktionieren tut es auf jeden Fall so wie ich mir das vorgestellt habe.
Hat es irgendwelche Nachteile oder Gefahren das in meinem Fall zu verwenden?
Hallo Thomas,
Für was ist md5() dann gedacht?
Funktionieren tut es auf jeden Fall so wie ich mir das vorgestellt habe.
Hat es irgendwelche Nachteile oder Gefahren das in meinem Fall zu verwenden?
md5() ist die Funktion für eine bestimmte Prüfsumme. Mehr Informationen dazu, was eine Prüfsumme - und darunter speziell MD5 - ist, findest du bei Wikipedia:
Eine Prüfsumme ist eigentlich nicht für Passwörter gedacht, sondern dazu um zu überprüfen, ob Dateien richtig übertragen wurden.
Wenn du z.B. eine Datei von 650 MB herunterlädst, und ein oder zwei Bytes davon sind fehlerhaft übertragen worden (obwohl das TCP/IP-Protokoll intern ja auch mit sehr simplen Prüfsummen arbeitet, um das zu verhindern), fällt das im Gesamtpaket kaum auf.
Nun kann man sich eine Prüfsumme über alle Bytes - also die gesamte Datei - berechnen lassen. Ein bestimmter Algorithmus (z.B. md5) sorgt dafür, dass auch nur ein einziges fehlerhaftes Byte in einer vollkommen anderen Prüfsumme resultiert. Das ist perfekt dafür, um große Dateien auf Fehler hin zu überprüfen.
Grüße
Marc Reichelt || http://www.marcreichelt.de/
你好 Marc,
Für was ist md5() dann gedacht?
Funktionieren tut es auf jeden Fall so wie ich mir das vorgestellt habe.
Hat es irgendwelche Nachteile oder Gefahren das in meinem Fall zu
verwenden?md5() ist die Funktion für eine bestimmte Prüfsumme.
Nein, MD5 ist ein kryptographischer Hashing-Algorithmus. Er ist durchaus
unter anderem für sowas wie Hashing von Passwörtern gedacht gewesen. Er ist
allerdings broken und deshalb ungeeignet.
再见,
克里斯蒂安
Hallo!
Ich habe folgendes vor:
- wenn jemand ein Passwort eingibt, möchte ich es zuerst verschlüsseln und dann in der Datenbank speichern
- loggt sich ein Benutzer mit seinem Passwort ein, wird seine Eingabe verschlüsselt und mit dem Wert in der Datenbank verglichen (der ja auch verschlüsselt gespeichert ist)
Du könntest einen Hashwert des Passwortes speichern. Das heißt, Du bildest z.B. den SHA1-Hash des Passwortes, und speicherst diesen. Diesen Wert kannst Du dann bei späteren Logins wieder mit dem Hashwert des eingegebenen Passwortes vergleichen.
siehe: http://de3.php.net/sha1
Da dies keine Verschlüsselung ist, kannst Du das Passwort nachträglich nicht mehr herausbekommen, z.B. wenn der User das Passwort vergessen hat. In dem Fall müsstest Du ein neues Passwort vergeben.
Verschlüsseln und entschlüsseln kannst Du mit den mcrypt-Funktionen: http://de3.php.net/mcrypt
Grüße
Andreas
Moin!
Hab grad crypt() getestet, aber wenn ich das selbe Wort mehrmals hintereinander mit crypt() verschlüsseln möchte, kommt jedes mal ein anderer verschlüsselter Wert raus?
Gibt es da eine geeignetere Funktion?
crypt() ist eigentlich genau dafür gedacht - allerdings ist die Funktion schon ziemlich alt, weshalb sie nur die ersten 8 Zeichen des Passwortes verwendet. 8 Zeichen lange Passwörter sind aber oftmals zu kurz, weshalb crypt() allein deswegen nicht mehr zum Einsatz kommen sollte. Außerdem kann man gecryptete Passwörter heutzutage schon recht gut mit "Brute Force" herausfinden, die Rechenpower existiert mittlerweile.
Aber nur zur Anwendung: crypt() arbeitet mit einem "salt", das ist ein beim ersten Mal zufällig von dir (oder der Funktion) gewählter Wert, der das Ergebnis von crypt() beeinflußt. Dasselbe Passwort, mit unterschiedlichem "salt" gecryptet, ist immer unterschiedlich.
Die Passwortprüfung benötigt deshalb das gleiche "salt" - praktischerweise sind das die ersten beiden Buchstaben des crypt-Wertes. Es reicht daher eigentlich immer aus, wenn man der crypt-Funktion bei der Prüfung sowohl das Klartext-Passwort als auch das bestehende Crypt-Passwort übergibt. Diese Funktion nimmt nämlich auch zwei Parameter entgegen (siehe http://www.php.net/crypt).
Wie man dieser Doku-Seite entnehmen kann, arbeitet Crypt aber nicht zwingend mit dieser ganz alten Methode, sondern wahlweise auch mit besseren Methoden wie MD5 oder SHA1, sofern das Betriebssystem dieses anbietet. Ich glaube aber, dass diese Vorgehensweise ziemlich problematisch ist, weil man keine wirkliche Kontrolle hat, ob nicht doch nur das alte DES-Verfahren mit 8 Zeichen Passwortlänge verwendet wird.
Empfehlenswerter sind md5() und sha1() - wobei diese Funktionen auch schon kryptografische Angriffe erleiden mußten, die deren Verwendung unter Umständen nicht vollkommen ratsam erscheinen lassen. PHP bietet derzeit aber nach meiner Information noch nicht die Nachfolgerfunktionen SHA-2 oder SHA-512 an.
Hallo Thomas,
Hab grad crypt() getestet, aber wenn ich das selbe Wort mehrmals hintereinander mit crypt() verschlüsseln möchte, kommt jedes mal ein anderer verschlüsselter Wert raus?
Dazu habe ich unter < http://forum.de.selfhtml.org/archiv/2005/5/t108606/#m676671> bereits ausführlich etwas geschrieben.
Viele Grüße,
Christian