Php passwort erstellung

TerraX10

Mitglied
Hi @ all,

und mal wieder stell ich ne kleine frage in die runde.

Gibts ne möglichkeit in ein passwort script ne funktion reinzubauen damit sich das neue und das alte passwort z.b um 5 zeichen unterscheiden müssen****
Hab irgendwie nirgends was brauchbares gefunden... Aber irgendwie geht das doch bestimmt oder****?

Mfg
 
Evntuell kannst du die Passwörter in ein Array aufteilen und diese dann mit Hilfe von array_diff vergleichen.

Hier noch ein Beispiel dazu:

PHP:
<?php
$alt = "passwort";
$neu = "password";

$arr_alt = str_split($alt);

$arr_neu = str_split($neu);

$anzahl = count(array_diff_assoc($arr_neu, $arr_alt));

if ($anzahl < 5) {
	echo "Die Passw&ouml;rter sind sich zu &auml;hnlich!";
} else {
	echo "Der Unterschied ist gro&szlig; genug!";
}

?>
 
Zuletzt bearbeitet:
Gehen tut es, die Frage ist, wie soll es sich unterscheiden.. Müssen es grundsätzlich 5 andere Zeichen sein oder dürfen sie nur nicht an gleicher Stelle stehen?

abcd135
efgh246 - ist ok?
5d3cb1a - ist nicht ok?

Man könnte es auch mit einem RegexPattern machen. Man packt das alte Passwort als Zeichenvorrat hinein (vorsicht bei Sonderzeichen) und als Ergebnis bekommt man ein Array der passenden Übereinstimmungen. Die Länge des Array im Vergleich zur Länge des Ausgangspasswortes sagt uns, ob die Bedingung erfüllt ist.
PHP:
<?php
$passwortAlt = "abcd135";
$passwortNeu = "d5cb3a1678";
 
$regex = "#[".$passwortAlt."]{1}#"; 
preg_match_all ($regex, $passwortNeu, $output);

echo "Länge des neuen Passworts :".len($passwortNeu);
echo "Übereinstimmung :".count($output[0]);
echo "<br/>";
var_dump($output[0]);
?>
mfg chmee
 
Zuletzt bearbeitet:
Am besten wäre es wenn sie sich grundsätzlich vom alten passwort unterscheiden.
genau so wie dus grad beschrieben hast ja^^

mfg terra
 
Oder ein Beispiel mit der levenshtein-Funktion

PHP:
<?php
$alt = "passwort";
$neu = "wortpass";

$anzahl = levenshtein($alt, $neu);

if ($anzahl < 5) {
    echo "Die Passw&ouml;rter sind sich zu &auml;hnlich!";
} else {
    echo "Der Unterschied ist gro&szlig; genug!";
}
?>
 
Also es tut mir leid, aber deine Frage - finde ich - deutet auf einen Denkfehler hin. Ich finde, du wärst schlecht beraten, wenn ich dir nun eine Lösung dafür geben würde.

Wenn du Passwörter auf Unterschiedlichkeit prüfen möchtest, musst du sie irgendwo im Klartext abgespeichert haben. Aber dazu kann mir dir doch nicht ernsthaft raten.

Statt der Passworte solltest du generell nur einem Hash-Wert in der Datenbank speichern. Dazu verwendest du Funktionen wie md5() oder sha1(). Von den Rückgabewerten dieser Funktionen ist das Originalpasswort nicht mehr rekonstruierbar.

Das bedeutet: Du speicherst z. B. den md5() deines Passwortes in der Datenbank. Wenn jemand sich nun einloggt, behandelst du die Eingabe ebenfalls wieder mit md5() und vergleichst dann nicht die Passwörter im Klartext, sondern die md5-Hashes.

Diese Vorgehensweise erlaubt dir NICHT, dass du beim Wechseln eines Passwortes die Unterschiedlichkeit zum alten Passwort vergleichen kannst. Aber sie ist um einiges sicherer.

Solltest du dich dafür entscheiden, googelst du am besten gleich noch nach dem Wort "Salt" in Verbindung mit Hash und Passwort, um die Sache perfekt zu machen.

Alles was du dann prüfen kannst ist, dass altes und neues PW unterschiedlich sind. Angesichts der erhöhten Sicherheit halte ich dies jedoch für die bessere Lösung. Denn mal ganz im ernst: Wenn ich mich bei dir anmelde, was geht dich als Admin mein Passwort an. Mit der von mir beschriebenen Lösung kennt auch der Admin die Passworte nicht und das ist auch gut so.

Hoffe, du konntest mir folgen :-)
 
da hatte ich wirklich nen denk fehler drinn... xD
das wurd mir grad auch irgendwie kla ^^
Ich wollte grade fragen ob ich die nicht eigentlich erst entschlüsseln müsste wenn ich das so lösen möchte...

ja ich konnte dir folgen ;) das ist mir grad auch bewusst geworden ^^

Danke ;)
 
aber da ich die passwörter dann eh nur auf gleichheit prüfen kann würde es dann nicht auch einfach so reichen?...^^

<?php if ($old_pwd != $new_pwd1 && $new_pwd2){

}?>

Mfg
 
@Anna Bolika Dein Ansatz ist absolut richtig. Gleichzeitig kennen wir aber von quasi allen Seiten, dass beim Ersetzen des Passwortes durch ein neues auch das alte angegeben werden muß. Somit könnte man ja sogar - nach der Überprüfung, ob das alte richtig ist - in JS oder php eben jene vom Fragenden gewollte Überprüfung machen. Letztlich wollen wir primär die Frage beantworten, sekundär auf Schwachstellen hinweisen, was Du ja gemacht hast. md5/sha1/salt bewahrt uns nämlich nicht vor schlechten Passwörtern, sondern nur vor der Rekonstruktion durch Fremde.

mfg chmee
 
Zurück