8791 sujets

Développement web côté serveur, CMS

Modérateur
Salut tout le monde,

J'ai fait un petit script afin de générer un mot de passe aléatoirement :


<?php
function mot_de_passe_aleatoire(){
	$nb_caractere=8; //Définition du nombre de caractère dans le mot de passe
	$bibliotheque=array(
		"A","a",
		"B","b",
		"C","c",
		"D","d",
		"E","e",
		"F","f",
		"G","g",
		"H","h",
		"I","i",
		"J","j",
		"K","k",
		"L","l",
		"M","m",
		"N","n",
		"O","o",
		"P","p",
		"Q","q",
		"R","r",
		"S","s",
		"T","t",
		"U","u",
		"V","v",
		"W","w",
		"Y","y",
		"Z","z",
		"0","1",
		"2","3",
		"4","5",
		"6","7",
		"8","9"
	);
	$nb_element=count($bibliotheque); 
	$nb_element--; //compte les éléments dans la bibliothèque - 1 pour éviter qu'il y ait une valeur null dans le mot de passe soit par exemeple : L NULL j c O I j O au lieu de L5jcOIjO	
	for($i=1;$i<=$nb_caractere;$i++){
		$aleatoire=mt_rand(0,$nb_element);
		$password[]=$bibliotheque[$aleatoire]; // renvoi du mot de pass aléatoire dans un tableau
	}
	$password_fin=implode("",$password); //décharge le tableau dans une string (kangourou ou brésilien à toi de voir [lol])
	return $password_fin; //renvoi la valeur
}
?>


J'ai deux petites questions sur mon code :
* Au départ lorsque suis arrivé à la fin de ma boucle j'avais mis echo $bibliothèque[$aleatoire]. En réfléchissant de plus près je me suis dit que j'allais peut être faire une erreur de sémantique par la suite afin de faire fonctionner cette fonction du style :

$pass=mot_de_passe_aleatoire();
$sql="INSERT INTO ma_table VALUES ('NULL','".$pass."');
echo $sql;

Donc mon code se serait trouvé avec deux fois echo (vaut mieux deux que pas du tout vous me direz). Mais peut être que cela peut poser des problèmes par la suite ?
* Mon autre question repose sur une autre façon de voir les choses. Je ne suis pas encore parfait avec les REGEX, Peut être qu'il y a une solution plus envisageable avec les REGEX afin d'optimiser le code ?

Bonne soirée à vous et merci de vous penchez sur ce petit sujet.

@+
Administrateur
suggestion :

$passrand = '';
$nb = 8;
for($i=0;$i<$nb;$i++) {
  $char = mt_rand(97,122);
  $passrand .= chr($char);
}
Bonjour.

Pour ta question sur le "echo" ( si tant est que je l'ai bien compris ) ne se poserait pas si tu organisais ton code en classes. C'est à dire faire de la programmation orientée objet.

Pour ta deuxième question j'avoue que je ne suis pas fan non plus des regex mais je ne vois en quoi elles pourraient t'être utiles ici.

Enfin pour améliorer ton code :
- pourquoi ne pas remplacer le tableau "bibliothèque" par une chaîne de caractères et récupérer le caractère à la position X
- pourquoi ne pas passer la variable "nb_caractere" en argument de ta fonction ce serait plus propre à mon avis
Modérateur
Salut,

*Dew :

Ton code est sympa. Je n'avais pas du tout pensé à la fonction chr(). Malheureusement, suivant ton script, cela génère que les minuscules.

* Changaco :
a écrit :
- pourquoi ne pas passer la variable "nb_caractere" en argument de ta fonction ce serait plus propre à mon avis

Exact, c'est ce que j'ai fait par la suite. J'ai même supprimer une ligne qui a permis d'optimiser le tout :

$password[]=$bibliotheque[$aleatoire];
}
$password_fin=implode("",$password);
return $password_fin; 

remplacer par

$password .= $bibliotheque[$aleatoire];
}
return $password;


En ce qui concerne les classes je ne suis pas encore un fortiche dedans. Je trouve que la syntaxe est un déroutante. faut prendre l'habitude Smiley murf .

J'ai une autre question également : Est ce une bonne idée d'ajouter des caractères spéciaux du type ($*£ ù ! @ etc.) ?

++
Modifié par Nolem (04 Jul 2008 - 18:57)
Nolem a écrit :
En ce qui concerne les classes je ne suis pas encore un fortiche dedans. Je trouve que la syntaxe est un déroutante. faut prendre l'habitude Smiley murf .
Ça peut l'être en effet mais la POO est de plus en plus incontournable et apporte de la lisibilité au code.
Nolem a écrit :
J'ai une autre question également : Est ce une bonne idée d'ajouter des caractères spéciaux du type ($*£ ù ! @ etc.) ?
J'allais dire que ça dépend pour quoi tu as besoin de ces mots de passe mais je viens aussi de penser aux utilisateurs lambda qui n'auraient pas ces signes sur leur clavier et pour qui cela pourrait être gênant.
Modérateur
Salut,

a écrit :
Ça peut l'être en effet mais la POO est de plus en plus incontournable et apporte de la lisibilité au code.


Je suis tout à fait d'accord avec toi. Je mis mets tout doucement. Mais de la à mettre en pratique Smiley murf .

a écrit :
J'allais dire que ça dépend pour quoi tu as besoin de ces mots de passe mais je viens aussi de penser aux utilisateurs lambda qui n'auraient pas ces signes sur leur clavier et pour qui cela pourrait être gênant.


C'est pour sécuriser le plus possible l'accès à l'admin. Néanmoins, c'est vrai que pour le commun des mortel, un mot de passe du style : T.k!l.@ n'est pas évident mais je pense plus sur que Tequila.

++