Bernd: Token bzw. Passwort generieren / php

Beitrag lesen

Hallo,

ich muss einmal einen token generieren, den ich an eine Email anhänge. Er wird zugleich in einer db gespeichert, und dort dann abgeglichen.

Das mache ich so:

   $randomString = bin2hex(random_bytes(16));
    $token = password_hash($randomString, PASSWORD_DEFAULT);

Anschließend soll ein temporäres Passwort generiert werden, was ich so mache:

    function generateSecurePassword($length = 12) {
        // Definiere die möglichen Zeichenkategorien
        $lowercase = 'abcdefghijklmnopqrstuvwxyz';
        $uppercase = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
        $numbers = '0123456789';
        $special = '!@#$%^&()-_=+[]{}|;:?';

        // Sicherstellen, dass die Länge des Passworts mindestens 6 Zeichen beträgt
        if ($length < 6) {
            throw new Exception('Die Länge des Passworts muss mindestens 6 Zeichen betragen.');
        }

        // Generiere mindestens 2 Großbuchstaben, 2 Sonderzeichen und 2 Ziffern
        $uppercase_part = substr(str_shuffle($uppercase), 0, 2);
        $special_part = substr(str_shuffle($special), 0, 2);
        $numbers_part = substr(str_shuffle($numbers), 0, 2);
        $lowercase_part = substr(str_shuffle($lowercase), 0, $length - 6);

        // Kombiniere die Teile und stelle sicher, dass die Sonderzeichen nicht am Anfang oder Ende sind
        $password_core = $lowercase_part . $uppercase_part . $numbers_part;
        $middle_part = str_shuffle($special_part); // Mische Sonderzeichen für die Mitte

        // Erstelle das Passwort ohne Sonderzeichen am Anfang und Ende
        $password = str_shuffle($password_core);
        $password = substr($password, 0, $length - strlen($middle_part)) . $middle_part;

        // Mische das gesamte Passwort
        $password = str_shuffle($password);

        // Schneide auf die gewünschte Länge
        return substr($password, 0, $length);
    }


    $newPass = generateSecurePassword(15);

Gibt es dabei etwas auszusetzen oder geht es besser oder sinnvoller?

Zumindest, dass kein Sonderzeichen am Anfang und Ende des Passworts stehen soll, klappt so schonmal nicht.

Gruß, Bernd