Générer un mot de pass aléatoire

Soyez le premier à donner votre avis sur cette source.

Vue 6 789 fois - Téléchargée 553 fois

Description

Voilà c'est le 1er script que je pose sur ce site. Il est très simple je sais, mais faut bien commencer gentillement.

Ce script permet donc de générer un mot de passe en PHP.
Les caractères utilisés sont de 0 à 9 et de a à Z. Ils sont stocké dans un array dans la fonction de génération.

Vous pouvez indiquer le nombre de caractères souhaités pour le mdp lors de l'appel à la fonction, sinon par défaut le nombre est 6 caractères. (la taille est illimitée, ou presque ;))

Une boucle "for" est utilisée avec un mt_rand() qui va chercher dans l'array de caractères.

Ensuite l'array est transformé en string avec "implode()" puis le résultat est retourné.

Voilà pour un début ;)

Source / Exemple :


<?php
/////////////////////////////////////////
// Génération de mot de pass           //
// Fichier: pass_gen.php               //
// Date de création: 31.12.09          //
// Crée par: sdk Narkos                //
// Ce fichier peut être modifié        //
/////////////////////////////////////////

// Génération d'un mot de passe
function GenPass($nbr_caractere = 6) // Reçoi le nbr de caractère que doit contenir le mdp (sinon 6 par défaut)
{
	if(is_numeric($nbr_caractere))
	{
		// Liste des caractères disponible pour la génération du mdp (cases de 0 à 61)
		$caracteres = array("A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z",0,1,2,3,4,5,6,7,8,9);
		
		// Création de l'array qui contiendra le mdp
		$array_mdp = array();
		for($boucle = 1; $boucle <= $nbr_caractere; $boucle++)
		{	
			// Ajout du caractère aléatoire dans l'array du mdp
			$array_mdp[] = $caracteres[mt_rand(0,count($caracteres)-1)];
		}
		
		$mdp = implode("",$array_mdp); // Transfo de l'array en string
		return $mdp; // Retourne la chaine contenant le mdp
	}
	else
	{
		return false; // la fonction n'a pas reçu un nombre en paramètre
	}
}
?>

Conclusion :


Je suis ouvert à toutes remarques pouvant améliorer ce code. (même un joyeux noel tant que ça m'aide ;)

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

Messages postés
3708
Date d'inscription
lundi 5 juillet 2004
Statut
Membre
Dernière intervention
27 avril 2012
25
Re,

Tu as nommé ta source "GÉNÉRER UN MOT DE PASS ALÉATOIRE", ne l'oublie pas :)
On peut donc considérer qu'une chaîne entre 8 et 15 caractères est satisfaisante. Inutile d'en générer plus.
MD5 retourne 32 car.

Bref, comme dit plus haut tu sors la "grosse artillerie" pour un truc qui se fait en 1 seule ligne, et qui est bien plus optimisé.
Maintenant, si tu souhaites rester sur ce principe, il pourrait être intéressant de le justifier. Par exemple en tentant de générer des mots de passe facile à retenir pour un humain, que tu complexifierais par l'ajout de caractères spéciaux et de ponctuation, par exemple :

trau20,abraz
?aimy1_@rinette
afer,130vint
...

Dans ce cas l'utilisation d'une fonction serait requise, en travaillant sur une alternance de voyelles / consonnes / car spéciaux.

Cordialement,

Kohntark-
Messages postés
10
Date d'inscription
dimanche 16 novembre 2008
Statut
Membre
Dernière intervention
2 septembre 2010

Salut Kohntark-,

Merci pour ta solution et ton explication. C'est vrai que t'as solution à l'air moins lourde.
Par contre par curiosité tu peux avoir maximum combien de caractères pour le mdp? car avec le md5 la taille se limite un peu je pense...
Sinon merci pour la faute dans mon code ;) je vais actualiser la source.

Salutations
Messages postés
3708
Date d'inscription
lundi 5 juillet 2004
Statut
Membre
Dernière intervention
27 avril 2012
25
Salut,

J'enfonce le clou sur la simplicité :)
Ta fonction est particulièrement lourde pour générer une simple chaîne aléatoire (boucle, tableaux, ...)

Un truc comme ça est tout de même mieux tu ne penses pas ?

$passLen = 12;
$pass = substr(md5(uniqid(mt_rand(), true)), 0, $passLen);

en plus c'est au moins 6 fois plus rapide (bon, OK, c'est ultra négligeable sur quelques itérations)

En passant, tu as une erreur dans ton code :
mt_rand(0,count($caracteres))
=>
mt_rand(0,count($caracteres)-1)

Cordialement,

Kohntark-
Messages postés
10
Date d'inscription
dimanche 16 novembre 2008
Statut
Membre
Dernière intervention
2 septembre 2010

Ouai j'ai compris qu'il y a plus simple, et bien sure qu'en ajoutant les caractères en plus de 0 à 9 et les minuscules le test sera plus juste, mais ça ne change rien au fait que ta soluce ne donne pas la possibilité d'avoir des caractères répétés plusieurs fois dans le mdp final, à moins de les écrire plusieurs fois dans ta chaîne...

Enfin bon là c'est un peu une question de gout ;) et de façon de faire.

Comme ça les gens auront plus de choix ;)
Messages postés
392
Date d'inscription
mercredi 28 octobre 2009
Statut
Membre
Dernière intervention
23 mars 2012
39
Salut,

Bonne année à toi aussi ;)

Je passe en coup de vent...Ton test ne signifie pas grand chose en l'état! Il aurait fallut que tu mettes les autres caractères minuscules et chiffres en supplément. Moi, je n'ai pas mis car sa faisait long à taper, mais il m'a sembler évident qu'il fallait les insérer.

Après, ce que je t'ai dit c'est qu'il y a plus simple pour générer des mdp que des tableaux et un mt_rand() :
Afficher les 9 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.