Génération de mot de passe complexe avec PHP

Cette fonction génère un mot de passe aléatoire robuste en utilisant random_int() pour garantir une sécurité cryptographique. Elle accepte plusieurs paramètres : la longueur (minimum 12 par défaut), l'inclusion de symboles (activée par défaut), l'inclusion de chiffres, de lettres minuscules et majuscules.


function generatePassword(
	int $length = 12,
	bool $includeSymbols = true,
	bool $includeNumbers = true,
	bool $includeLower = true,
	bool $includeUpper = true
): string {
	if ($length < 12) {
		$length = 12;
	}
	
	$lower = 'abcdefghijklmnopqrstuvwxyz';
	$upper = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
	$numbers = '0123456789';
	$symbols = '!@#$%^&*()-_=+[]{}|;:,.<>?';
	
	$allChars = '';
	$password = '';
	$requiredChars = [];
	
	if ($includeLower) {
		$allChars .= $lower;
		$requiredChars[] = $lower[random_int(0, strlen($lower) - 1)];
	}
	if ($includeUpper) {
		$allChars .= $upper;
		$requiredChars[] = $upper[random_int(0, strlen($upper) - 1)];
	}
	if ($includeNumbers) {
		$allChars .= $numbers;
		$requiredChars[] = $numbers[random_int(0, strlen($numbers) - 1)];
	}
	if ($includeSymbols) {
		$allChars .= $symbols;
		$requiredChars[] = $symbols[random_int(0, strlen($symbols) - 1)];
	}
	
	if ($allChars === '') {
		throw new Exception('Aucun type de caractère sélectionné pour le mot de passe.');
	}
	
	for ($i = 0; $i < $length - count($requiredChars); $i++) {
		$password .= $allChars[random_int(0, strlen($allChars) - 1)];
	}
	
	$password .= implode('', $requiredChars);
	$passwordArray = str_split($password);
	shuffle($passwordArray);
	
	return implode('', $passwordArray);
}
		

Explication :
- La fonction commence par assurer une longueur minimale de 12 caractères.
- Selon les options activées, elle construit un ensemble de caractères et sélectionne au moins un caractère de chaque type (minuscules, majuscules, chiffres, symboles).
- Le reste du mot de passe est généré aléatoirement, puis les caractères requis sont mélangés pour un résultat final sécurisé.