Soyez le premier à donner votre avis sur cette source.
Snippet vu 10 098 fois - Téléchargée 18 fois
<?php /******************************************************************************/ /* Nom : password_manager.class.php */ /* Auteur : Dièse Include */ /* Date : Sep 2007 */ /* Projet : FRAMEWORK Dièse Include */ /* Objet : Utilitaires de gestion et génération de mots de passe */ /******************************************************************************/ /******************************************************************************/ /* Importation des packages */ /******************************************************************************/ /******************************************************************************/ /* Interface */ /******************************************************************************/ class password_manager { /****************************************************************************/ /* Définition des propriétés de la classe */ /****************************************************************************/ var $default_password_length = 15; // Longueur par défaut du mot de passe var $use_only_letters = true; // Vrai si le mot de passe ne doit comporter que des lettres var $case_sensitive = false; // Vrai si le mélange maj et min est autorisé var $use_special_char = false; // Vrai si le mot de passe peut contenir des caractères spéciaux var $encrypt_method = "md5"; // Par défaut cryptage MD5 var $clear_password = ""; // Mot de passe en clair généré // Définition des tableaux de caractères utilisables var $usable_chars = array(); /****************************************************************************/ /* Définition des méthodes publiques */ /****************************************************************************/ /****************************************************************************/ /* public void constructor password_manager(void) */ /* @access public */ /* @type constructeur */ /* @param void */ /* @return void */ /* @abstract Instancie un objet de type password_manager */ /****************************************************************************/ function password_manager(){ /**************************************************************************/ /* Déclaration des variables locales */ /**************************************************************************/ /**************************************************************************/ /* Implémentation */ /**************************************************************************/ return; } /****************************************************************************/ /* public void set_password_length(int length) */ /* @access public */ /* @type setter */ /* @param int $length => longueur par défaut du mot de passe */ /* @return void */ /* @abstract Définit la longueur par défaut du mot de passe */ /****************************************************************************/ function set_password_length($length){ /**************************************************************************/ /* Déclaration des variables locales */ /**************************************************************************/ $max_password_length = 15; // Longueur maximale à ne pas dépasser /**************************************************************************/ /* Implémentation */ /**************************************************************************/ if(defined('MAX_PASSWORD_LENGTH')) $max_password_length = MAX_PASSWORD_LENGTH; if($length == 0 || $length > $max_password_length){ $this->default_password_length = $max_password_length; } else { $this->default_password_length = $length; } return; } /****************************************************************************/ /* public void use_only_letters(bool use) */ /* @access public */ /* @type setter */ /* @param bool $use */ /* @return void */ /* @abstract Détermine si le mot de passe est constitué ou non de lettres */ /* uniquement. */ /****************************************************************************/ function use_only_letters($use){ /**************************************************************************/ /* Déclaration des variables locales */ /**************************************************************************/ /**************************************************************************/ /* Implémentation */ /**************************************************************************/ $this->use_only_letters = $use; return; } /****************************************************************************/ /* public void use_special_char(bool use) */ /* @access public */ /* @type setter */ /* @param bool $use */ /* @return void */ /* @abstract Détermine si le mot de passe peut contenir des caractères */ /* spéciaux. */ /****************************************************************************/ function use_special_char($use){ /**************************************************************************/ /* Déclaration des variables locales */ /**************************************************************************/ /**************************************************************************/ /* Implémentation */ /**************************************************************************/ $this->use_special_char = $use; return; } /****************************************************************************/ /* public void is_case_sensitive(bool sensitive) */ /* @access public */ /* @type setter */ /* @param bool $sensitive */ /* @return void */ /* @abstract Détermine si le mot de passe est constitué de maj et min */ /* ou seulement de minuscules */ /****************************************************************************/ function is_case_sensitive($sensitive){ /**************************************************************************/ /* Déclaration des variables locales */ /**************************************************************************/ /**************************************************************************/ /* Implémentation */ /**************************************************************************/ $this->case_sensitive = $sensitive; return; } /****************************************************************************/ /* public void set_encrypt_method(string method) */ /* @access public */ /* @type setter */ /* @param string $method => méthode d'encryptage à utiliser */ /* - md5 par défaut, */ /* - sha1 */ /* - custom : encryptage #Include */ /* @return void */ /* @abstract Détermine la méthode d'encryptage du mot de passe */ /****************************************************************************/ function set_encrypt_method($method){ /**************************************************************************/ /* Déclaration des variables locales */ /**************************************************************************/ $mns_method = ""; // Chaîne réduite en minuscules /**************************************************************************/ /* Implémentation */ /**************************************************************************/ if($method != ""){ $mns_method = strtolower($method); if($mns_method == "md5" || $mns_method=="sha1" || $mns_method == "custom"){ $this->encrypt_method = $mns_method; } } return; } /****************************************************************************/ /* public void genere_password(void) */ /* @access public */ /* @type Fonction */ /* @param void */ /* @return void */ /* @abstract Génère un mot de passe aléatoire à partir des définitions */ /* @comment Ajouter à terme un système évitant de doubler les lettres */ /****************************************************************************/ function genere_password(){ /**************************************************************************/ /* Déclaration des variables locales */ /**************************************************************************/ $usable_chars_length = 0; // Taille du tableau des caractères utilisables $clear_password = ""; // Mot de passe en clair généré /**************************************************************************/ /* Implémentation */ /**************************************************************************/ // Récupère la tables des minuscules systématiquement $this->add_min_table(); if($this->case_sensitive){ $this->add_maj_table(); } if(!$this->use_only_letters){ $this->add_digit_table(); } if($this->use_special_char){ $this->add_special_chars_table(); } // En sortie $this->usable_chars contient l'ensemble des caractères utilisables // Génère ensuite aléatoirement une chaîne de taille égale à la taille souhaitée for($i=0;$i<$this->default_password_length;$i++){ $clear_password .= $this->usable_chars[$this->tirage()]; } // Le mot de passe est généré $this->clear_password = $clear_password; # Debug #echo "Mot de passe généré : " . $clear_password . " Taille : " . strlen($clear_password) . "<br/>\n"; # Fin Debug return; } /****************************************************************************/ /* public string get_encrypted_password(void) */ /* @access public */ /* @type getter */ /* @param void */ /* @return string */ /* @abstract Retourne le mot de passe encrypté selon la méthode définie */ /****************************************************************************/ function get_encrypted_password(){ /**************************************************************************/ /* Définition des variables locales */ /**************************************************************************/ $scramble_password = ""; // Mot de passe crypté /**************************************************************************/ /* Implémentation */ /**************************************************************************/ if($this->clear_password == ""){ $this->genere_password(); } // En fonction de l'algorithme de cryptage switch($this->encrypt_method){ case 'md5': $scrambled_password = md5($this->clear_password); break; case 'sha1': $scrambled_password = sha1($this->clear_password); break; case 'custom': // Ajoutez ici votre propre algorithme de cryptage... si besoin $scrambled_password = $this->clear_password; break; } return $scrambled_password; } /****************************************************************************/ /* public string get_clear_password(void) */ /* @access public */ /* @type getter */ /* @param void */ /* @return string */ /* @abstract Retourne le mot de passe en clair */ /****************************************************************************/ function get_clear_password(){ /**************************************************************************/ /* Définition des variables locales */ /**************************************************************************/ /**************************************************************************/ /* Implémentation */ /**************************************************************************/ if($this->clear_password == ""){ $this->genere_password(); } return $this->clear_password; } /****************************************************************************/ /* Définition des méthodes protégées */ /****************************************************************************/ /****************************************************************************/ /* Définition des méthodes privées */ /****************************************************************************/ /****************************************************************************/ /* private int tirage(void) */ /* @access private */ /* @type Méthode */ /* @param void */ /* @return int */ /* @abstract Retourne une valeur entière aléatoire comprise entre 0 et */ /* la taille maximale du tableau des caractères utilisables. */ /****************************************************************************/ function tirage(){ /**************************************************************************/ /* Déclaration des variables locales */ /**************************************************************************/ $usable_char_bound = 0; // Taille maximale du tableau des caractères utilisables /**************************************************************************/ /* Implémentation */ /**************************************************************************/ $usable_char_bound = sizeof($this->usable_chars) - 1; // Initialise le générateur de nombre aléatoire srand((double)microtime()*1000000); return rand(0,$usable_char_bound); } /****************************************************************************/ /* private void add_min_table(void) */ /* @access private */ /* @type getter */ /* @param void */ /* @return void */ /* @abstract Ajoute la table des minuscules au tableau des caractères */ /* utilisables. */ /****************************************************************************/ function add_min_table(){ /**************************************************************************/ /* Déclaration des variables locales */ /**************************************************************************/ $min_chars = 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'); /**************************************************************************/ /* Implémentation */ /**************************************************************************/ $this->usable_chars = array_merge($this->usable_chars,$min_chars); return; } /****************************************************************************/ /* private void add_maj_table(void) */ /* @access private */ /* @type getter */ /* @param void */ /* @return void */ /* @abstract Ajoute la table des majuscules au tableau des caractères */ /* utilisables. */ /****************************************************************************/ function add_maj_table(){ /**************************************************************************/ /* Déclaration des variables locales */ /**************************************************************************/ $maj_chars = array('A','B','B','D','E','F','G','H','I','J','K','L','M','N', 'O','P','Q','R','S','T','U','V','W','X','Y','Z'); /**************************************************************************/ /* Implémentation */ /**************************************************************************/ $this->usable_chars = array_merge($this->usable_chars,$maj_chars); return; } /****************************************************************************/ /* private void add_digit_table(void) */ /* @access private */ /* @type getter */ /* @param void */ /* @return void */ /* @abstract Ajoute la table des chiffres au tableau des caractères */ /* utilisables. */ /****************************************************************************/ function add_digit_table(){ /**************************************************************************/ /* Déclaration des variables locales */ /**************************************************************************/ $digits = array('0','1','2','3','4','5','6','7','8','9'); /**************************************************************************/ /* Implémentation */ /**************************************************************************/ $this->usable_chars = array_merge($this->usable_chars,$digits); return; } /****************************************************************************/ /* private void add_special_chars_table(void) */ /* @access private */ /* @type getter */ /* @param void */ /* @return void */ /* @abstract Ajoute la table des caractères spéciaux au tableau des */ /* caractères utilisables. */ /****************************************************************************/ function add_special_chars_table(){ /**************************************************************************/ /* Déclaration des variables locales */ /**************************************************************************/ $special_chars = array('@','$','^','+','-','|','!','#','*','/'); /**************************************************************************/ /* Implémentation */ /**************************************************************************/ $this->usable_chars = array_merge($this->usable_chars,$special_chars); return; } } ?>
10 juin 2008 à 22:24
Merci pour cette jolie classe bien utile ;) et bien commentée
15 sept. 2007 à 00:44
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.