Moin!
b) der generierte Code immer ein anderer ist, bei gleichem Passwort, wie kann ich dann 2 vergleichen?
Beim Verschlüsseln übergibst du einen Zufallswert (salt) (der kann aber auch immer gleich sein) mit an die Funktion. Unterschiedliche Zufallswerte erzeugen unterschiedliche Ergebnisse. Gleiche Zufallswerte erzeugen gleiche Ergebnisse.
Und den Zufallswert, der bei der Erzeugung zur Anwendung gekommen ist, mußt du dir nicht mal extra merken, der steckt nämlich in den ersten paar Zeichen des verschlüsselten Paßwortes. Deshalb übergibst du das verschlüsselte Paßwort beim verschlüsseln des Login-Paßwortes mit an die Funktion und kriegst dadurch vergleichbare Werte.
if (crypt($loginpw,$altespw)==$altespw) { //login geht }
Das mit dem Zufallswert gibts aber nur bei der Funktion crypt. Diese Funktion implementiert in PHP verschiedene Mechanismen, die unterschiedlich sicher sind. Je mehr salt-Länge, desto besser.
Mehr (englische) Informationen hier: http://www.php.net/manual/en/function.crypt.php
Du kannst md5() benutzen, da steckst du nur Strings rein, und kriegst verschlüsseltes raus (ohne Zufallselement offenbar). Das mag für deine Anwendung relativ egal sein, der Witz ist, daß mit crypt eben dieser Zufallswert ins Spiel kommt, d.h. gleiche Paßwörter sehen verschlüsselt anders aus, wenn sie unterschiedliche salt-Werte haben.
- Sven Rautenberg