Bugfix: In Zeile 48 heißt es:
$salt .= $characterList{mt_rand(0,strlen($characterList))};
Richtig müsste es aber lauten:
$salt .= $characterList{mt_rand(0,strlen($characterList)-1)};
Der Fehler führt dazu, dass ein Salt generiert wird, das kürzer als 8 Zeichen ist. Damit ist dann später ein Einloggen unmöglich. Hier die Erklärung im Detail:
Die Zeichenkette $characterList ist 62 Zeichen lang. mt_rand(0,strlen($characterList)) kann den Wert 62 annehmen, so dass die Konstellation entsteht: $salt .= $characterList{62};
Damit würde aber genau das 63. Zeichen der Zeichenkette an $salt angefügt. Da es das 63. Zeichen nicht gibt, wird ein leeres Zeichen (also quasi nix) angefügt und damit gerät $salt zu kurz (und zwar mindestens 1 Zeichen). Da die Funktion xtc_validate_password von einem Salt mit genau 8 Stellen ausgeht, scheitert der spätere Login.